首页 > 编程技术 > php

php session会话使用方法详解

发布时间:2016-11-25 17:08

本文章来给各位php 初学者介绍一篇关于php中全局变量session会话的基本使用方法,有需要了解的朋友可进入参考参考。

Session是什么

Session是指有始有终的一系列动作或信息,比如去看电影从进入影院到走出影院的整个过程可以称为一个Session。Cookie将数据存储在客户端计算机上,而Session将不定量的变量存储在服务器端。

每一个用户链接网站服务器后便会产生一个Session,所以首先要告诉服务器使用Session功能来存储数据。启用Session功能的方式有两种:

1、使用session_start()函数启动会话,其结构形式如下:

session_start()
函数不能带参数,其返回值为布尔型。

2、在php.ini中设置参数 session.auto_start,将此参数设为1,即当有连接到服务器后Session功能将自动启用。

启动Session后,在使用Session变量之前首先要注册变量,之后才能使用,反之不使用某个变量时就要取消注册。Session_register(变量名)可以注册一个Session变量;Session_unregister(变量名)可以取消注册一个Session变量,例如:

 代码如下 复制代码

session_start(); /* 启动session变量 */
session_register('user') /* 注册user变量 */
session_unregister('user') /* 注销user变量 */

调用session变量

php session使用方法:用函数$_SESSION[]可以创建一个函数变量,其格式如下:

 代码如下 复制代码

$_SESSION['$string']=$str;

参数$string是要定义的变量名,$str是变量值。在调用时使用$_SESSION[$string]的格式。

实例:

 代码如下 复制代码

<?php
 session_start();
 $_SESSION['name']="Jane";
 $_SESSION['password']="888888";
 echo "用户名是: " .$_SESSION['name'] ."<br>";
 echo "密码是: " .$_SESSION['password'] ."<br>";
?>

session的使用

本站前面介绍了session的一些概念以及基本操作,这里通过实例介绍php session使用的方法。

实例代码:

 代码如下 复制代码

<?php
 session_start(); /* 启动session */
 $_SESSION['name']="LIMing";
 $_SESSION['password']="888888";
 $_SESSION['time']=time();
 echo "<a href='session.php' target='_blank'>传递session</a><br />"
?>

session.php代码:

 代码如下 复制代码
<?php
 session_start();
 echo "用户名是:" .$_COOKIE['name'] ."<br>";
 echo "密码是:" .$_SESSION['password'] ."<br>";
 echo "访问时间是:" .date('Y m d H:i:s', $_SESSION['time']) ."<br>";
?>

 

获取session_id的值

每一个session都有会被指定一个特定的id,用session_id来标识。我们可以通过session_id()函数查看当前session_id的值,其结构形式如下:

session_id()

实例:

 代码如下 复制代码

<?php
 session_start(); /* 启动session */
 $id=session_id(); /* 获取当前session_id */
 echo "当前sessionID是: " .$id;
?>

cookie与session的区别

session和cookie都是重要的会话管理应用,在许多的php开发项目都会用到。它们的作用是能够给不同的用户创建不同的值,从而让不同的用户返回的结果都不相同。

那么session cookie区别在哪里呢?

cookie是利用客户端来创建,当用户用浏览器打开网站时就会给用户创建一个cookie,这个过程是由用户的电脑执行的,网站的服务器只是发送一些指令。因此如果用户禁止了cookie功能,则无法利用cookie来实现相关功能。

session则是利用服务端来创建,整个过程都由服务器来执行,用户无权干预。

在运用时,如果你希望节约服务器的资源,可以选用cookie来进行会话管理;如果你希望所有的浏览者都能使用会话管理,则应该选用session。

在php中变量分为局部变量、变量函数、全局变量、动态变量、动态变量五种了,下面我来分别给各位朋友详细介绍关于这五种php变量使用方法,有需要了解的朋友可参考。

静态变量

动态变量当函数执行完之后,其存储空间会自动释放。而静态变量则当函数执行完后,存储空间仍然存储其变量。如果想利用函数的变量结果在进行计算,就需要将变量设置为静态变量。

php静态变量的设置方法是在变量前加”static”符号。

实例:

 代码如下 复制代码

<?php
 function fun(){
  static $i=0;
  echo "$i <br>";
  $i++;
 }
 fun();
 fun();
?>

动态变量

当我们定义了一个变量,就相当于在服务器申请了一个存储空间。动态变量即值不断变化的量,特点是当函数运行完成后,其变量存储空间的值就会自动释放。就比如货车拉货,运到目的地后就卸货,然后返回在拉。

实例:

 代码如下 复制代码

<?php
 function fun(){
  $i=0;
  echo "$i <br>";
  $i++;
 }
 fun();
 fun();
?>

全局变量

前面学习了局部变量,其值只在一定范围内有效,如果要实现跨域调用,则要用到全局变量。

php定义全局变量:全局变量的声明只要在变量名前加上”global”就可以了,定义了全局变量之后,主程序的变量可以被函数内部调用,同样地函数内的变量也可以被主程序所用。

实例1:

 代码如下 复制代码

<?php
 $a=1;
 function fun(){
  echo $a ."<br>"; /* $a为局部变量,不显示内容 */
  global $a;  /* 定义$a为全局变量 */
  echo $a ."<br>";
  global $b;
  $b=10;
 }
 fun();
 echo $b;
?>

局部变量

在php语言中,变量都有一定的作用范围,一旦离开,变量将失去意义或者发生改变,称之为变量作用域。就好象局域网,只在组建的办公室或者宿舍有效,一旦超出这个范围将连接不到网络。按变量的作用范围可以分为局部变量和全局变量,这里先讲局部变量。

php局部变量值函数内定义的变量只在函数内使用,函数外无效;同样地,函数外定义的变量如果没有传递,在函数内也无效。

实例:

 代码如下 复制代码
<?php
 function fun(){
  $a1=5;
  echo $a2;
 }
 fun();
 $a2=10;
 echo $a1;
?>

 

以上代码运行后什么也没有输出。

变量函数

变量不仅可以用一些英文字母等字符等义, 也可以对函数定义。如果将一个变量名后加上”()”符号,php将寻找与变量的值相同的函数执行,称之为变量函数。

实例:

 代码如下 复制代码

<?php
 function p($name){
  echo "my name is ".$name;
 }
 $someone="p";  /* 将字符串"p"赋给$someone */
 $someone('Tom'); /* 这里等价于$p('Tom'),是一个变量函数 */
?>

在批量的数据采集在php中很少会使用file_get_contents函数来操作,但是如果是小量的我们可以使用file_get_contents函数操作,因为它不但好用而且简单易学,下面我来介绍file_get_contents用法与使用过程中的问题解决办法。

先来看问题

file_get_contents不能获取带端口的网址

例如:

 代码如下 复制代码
file_get_contents('http://localhost:12345');

没有任何获取。

解决方法是 :关闭selinux

1 永久方法 – 需要重启服务器

修改/etc/selinux/config文件中设置SELINUX=disabled ,然后重启服务器。

2 临时方法 – 设置系统参数

使用命令setenforce 0

附:
setenforce 1 设置SELinux 成为enforcing模式
setenforce 0 设置SELinux 成为permissive模式


file_get_contents超时

 代码如下 复制代码

function _file_get_contents($url)
{
  $context = stream_context_create(array(
     'http' => array(
      'timeout' => 180 //超时时间,单位为秒
     )
  ));  
  return @file_get_contents($url, 0, $context);

}

好了上面的问题得到解决之后我们可以开始采集了。

 

 代码如下 复制代码
<?php
//全国,判断条件是$REQUEST_URI是否含有html
if (!strpos($_SERVER["REQUEST_URI"],".html"))
{
$page="http://qq.ip138.com/weather/";
$html = file_get_contents($page,'r');
$pattern="/<B>全国主要城市、县当天和未来五天天气趋势预报在线查询</B>(.*?)<center style="padding:3px">/si";
//正则匹配之间的html
preg_match($pattern,$html,$pg);
echo "";
//正则替换远程地址为本地地址
$p=preg_replace('//weather/(w+)/index.htm/', 'tq.php/$1.html', $pg[1]);
echo $p;
}
//省,判断条件是$REQUEST_URI是否含有?
else if(!strpos($_SERVER["REQUEST_URI"],"?")){
//yoyo推荐的使用分割获得数据,这里是获得省份名称
$province=explode("/",$_SERVER["REQUEST_URI"]);
$province=explode(".",$province[count($province)-1]);
$province=$province[0];
//被注释掉的是我自己写出来的正则,感觉写的不好,但效果等同上面
//preg_match('/[^/]+[.(html)]$/',$_SERVER["REQUEST_URI"],$pro);
//$province=preg_replace('/.html/','',$pro[0]);
$page="http://qq.ip138.com/weather/".$province."/index.htm";
//获取html数据之前先尝试打开页面,防止恶意输入地址导致出错
if (!@fopen($page, "r")) {
die("对不起,该地址不存在!<a href=javascript:history.back(1)>点击这里返回</a>");
exit(0);
}
$html = file_get_contents($page,'r');
$pattern="/五天天气趋势预报</B>(.*?)请输入输入市/si";
preg_match($pattern,$html,$pg);
echo "";
//正则替换,获取省份,城市
$p=preg_replace('//weather/(w+)/(w+).htm/', '$2.html?pro=$1', $pg[1]);
echo $p;
}
else {
//市,通过get传递省份
$pro=$_REQUEST['pro'];
$city=explode("/",$_SERVER["REQUEST_URI"]);
$city=explode(".",$city[count($city)-1]);
$city=$city[0];
//preg_match('/[^/]+[.(html)]+[?]/',$_SERVER["REQUEST_URI"],$cit);
//$city=preg_replace('/.html?/','',$cit[0]);
$page="http://qq.ip138.com/weather/".$pro."/".$city.".htm";
if (!@fopen($page, "r")) {
die("对不起,该地址不存在!<a href=javascript:history.back(1)>点击这里返回</a>");
exit(0);
}
$html = file_get_contents($page,'r');
$pattern="/五天天气趋势预报</B>(.*?)请输入输入市/si";
preg_match($pattern,$html,$pg);
echo "";
//获取真实的图片地址
$p=preg_replace('//image//', 'http://qq.ip138.com/image/', $pg[1]);
echo $p;
}
?>

如果上面办法无法采集到数据我们可以使用来处理

 

 代码如下 复制代码
<?php
$url = "http://www.111cn.net ";
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
//在需要用户检测的网页里需要增加下面两行
//curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
//curl_setopt($ch, CURLOPT_USERPWD, US_NAME.":".US_PWD);
$contents = curl_exec($ch);
curl_close($ch);
echo $contents;
?>
静态页面中看上去好你是不能直接调用php文件了,但是有可以使用js调用方式来调用php文件,当然还可以使用ajax 调用php文件哦,下面我来给大家介绍

举一个简单的例子来说明:
 
如在页面a.html中用下面这句调用,可以将action=test的参数传递到b.php。

Javascript代码

 代码如下 复制代码

<script type="text/javascript"" width=100% src="b.php?action=test"></script> 

在b.php中有这样一段PHP代码:

PHP代码

 代码如下 复制代码

<? $action=$_GET['action'];   
echo "document.write('".$action."');n";  
?> 

当执行a.html文件时,就会调用b.php文件,并将b.php文件的输出作为JS语句来执行,内容为JS传递的参数action的值,也就是在PHP文件中接受过来的action的值.


jquery的load函数是请求另一个文件并加载到当前DOM里的调用


1、加载一个php文件,该php文件不含传递参数

 代码如下 复制代码
$("#myID").load("test.php");

2、加载一个php文件,该php文件含有一个传递参数

 代码如下 复制代码
$("#myID").load("test.php",{"name" : "Adam"});

 
3. 加载一个php文件,该php文件含有多个传递参数。注:参数间用逗号分隔

 代码如下 复制代码
$("#myID").load("test.php",{"name" : "Adam" ,"site":www.111cn.net});
//导入的php文件含有一个传递参数,类似于:test.php?name=Adam&site=www.111cn.net

 

4. 加载一个php文件,该php文件以数组作为传递参数

 代码如下 复制代码

$("#myID").load("test.php",{‘myinfo[]‘, ["Adam", www.111cn.net});
//导入的php文件含有一个数组传递参数。

在php中数组分类很多种,如一维数组,二维数组,三维或多维数组,下面我来给大家介绍php 遍历多维数组,有需要的朋友可参考。

在php遍历数组有三个函数foreach、each、list & each下面我们看它们是如何遍历多维数组的。

先看一个遍历二维数组

 代码如下 复制代码

<?php 
$sports = array( 
    'football' => 'good', 
    'swimming' => 'very well', 
    'running'  => 'not good' 
    ); 
     
foreach ($sports as $key => $value) { 
    echo $key.": ".$value."<br />"; 

?>

下面看遍历三维数组

例1

 代码如下 复制代码

 function arr_fun($arr){
       if(is_array($arr)){
         foreach($arr as $v){
            if(is_array($v)){
            arr_fun($v);
            }else{
            echo $v."<br>";
            }
         }
       }else{
         echo $arr."<br>";
       }
   }

例2

 代码如下 复制代码

<?php
/*
*  -------------------------------------------------
*   Url    : www.111cn.net
*   Date   : 2011-03-09
*  -------------------------------------------------
*/
function arr_foreach ($arr)
{
 if (!is_array ($arr))
 {
  return false;
 }
 
 foreach ($arr as $key => $val )
 {
  if (is_array ($val))
  {
   arr_foreach ($val);
  }
  else
  {
   echo $val.'<br/>';
  }
 }
}
$arr1 = array (1=>array(11,12,13,14=>array(141,142)),2,3,4,5);
echo '<pre>';
print_r($arr1);
echo '<pre>';
arr_foreach ($arr1);
?>

输出结果

Array
(
    [1] => Array
        (
            [0] => 11
            [1] => 12
            [2] => 13
            [14] => Array
                (
                    [0] => 141
                    [1] => 142
                )
        )
    [2] => 2
    [3] => 3
    [4] => 4
    [5] => 5
)
11
12
13
141
142
2
3
4
5

利用list与each遍历二维数组

 代码如下 复制代码

<?php
$sports = array(
    'football' => 'good',
    'swimming' => 'www.111cn.net',
    'running'  => 'not good'
);

while (list($key, $value) = each($sports)) {
    echo $key.": ".$value."<br />";
}
?>

标签:[!--infotagslink--]

您可能感兴趣的文章: