Session

Session 指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也

就是用户浏览这个网站所花费的时间。从上述的定义中我们可以看到,Session 实际上是一

个特定的时间概念。

一般来说,在网站上某一个页面中的变量(指服务器端变量,下同)是不能在下一页中用

的,有了session就好办了。session中注册的变量可以作为全局变量使用。这样我们就可以

将session用于用户身份认证,程序状态记录,页面之间参数传递。

如何创建SESSION

使用session之前不能有任何输出

使用session 必须开启标志  代码为

<?php

Session_start();

?>

在PHP中session 会话是保存在一个全局数组中,这个数组为$_SESSION,你可以通过增加数

组索引增加会话元素。看例子

<?php

session_start();//开启session标志

$_SESSION['USER'] = 'zppx';//设置一个会话元素USER 值为zppx

$_SESSION['pass'] = 'password';//设置一个会话元素pass 值为password

?>

将以上代码保存为session_1.php,并浏览

同时新建一个文件为session_2.php

代码为

<?php

session_start();//开启session标志

//查看设置的结果

print_r($_SESSION);

?>

浏览可以查看输出的结果:

Array ( [USER] => zppx [pass] => password )

说明我们的会话已经产生作用


现在我们来看下一个简单的使用原理

<?php

//简单的计数器

session_start();

if(!isset($_SESSION['counter'])){

$_SESSION['counter'] = 1;

}else{

$_SESSION['counter'] ++;

}

echo $_SESSION['counter'];

?>

保存为session_3.php

不断的浏览刷新这个页面可以看到值在不断的变化

现在需要我们来解释几个问题。

1. 如何修改已经保存的session的值呢?

$_SESSION['NAME'] = 'PHP';

2. 销毁session

session_unset();

session_destroy();

3. 查看sessionid ,session_id()

echo session_id();

4. session编码与解码

$string = session_encode();

echo $string;

session_unset();

session_decode($string);

print_r($_SESSION);

session相关参数的解释

/* *

* session 用来跟踪用户的状态,默认生成sessionid

* session 配置的相关参数

* session_auto_start 开启session

* session_name 发送到客户端得session cookie名称  默认为  phpsesionid

* session.cookie_lifetime 生命周期

* session.cookie_path 有效路径  默认“/”不需要需该

* session.cookie_domain 对什么域名有效

* session_sava_handler session存储到什么文件,默认为  files文件

* session_save_path 存储路径

* session_gc_maxlifetime 过期时间  


* session.use_trans_sid 跟踪当COOKIE禁用采用url

* 查看当前会话配置

* session_get_cookie_params();

* session_set_cookie_params();

*

*

*

* */

//print_r(session_get_cookie_params());

COOKIE

cookie 是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制。

PHP 在http 协议的头信息里发送cookie,因此  setcookie()     函数必须在其它信息被输出到浏览器

前调用,这和对  header()    函数的限制类似

cookie 是个很小的  文本文件4kb,当用户访问网站时,会立即生成个这样的文件,保存在

用户的客户端

通常以username@domainname保存

* cookie技术

* 1.记录访客的信息

* 2.页面之间传递变量

设置cookie

使用 setcookie()函数设置cookie

如  setcookie("visit","php",mktime()+86400,"/")

参数祥解:setcooke(name, value, expires, path , domain, secure);

* cookie 属性

* 1.name 名字(必须)

* 2.value 值

* 3.expires 过期时间(必须)

* 4.path  设置“/”  表示这个域所有数组都可以访问

* 5.domain 有效的域名

* 6.secure 布尔值  ,如果为true 表示只有ssl加密连接才发送cookie到客户端

代码片段

<?php

$value = 'szzppx';

setcookie("TestCookie", $value); /* 简单  cookie设置  */

setcookie("TestCookie", $value, time()+3600); /* 有效期  1个小时  */  


setcookie("TestCookie", $value, time()+3600, "/~zppx/",".xxx.com", 1); /*  有效目录  /~zppx,有

效域名  xxx.com 及其所有子域名  */

?>

Cookie 的读取:

直接用php  内置超级全局变量$_COOKIE 就可以读取浏览器端的cookie

之前我们设置了个visit

现在我们来读取

print $_COOKIE[visit];

cookie 的删除:

只需把有效时间设为小于当前时间,和把值设置为空

如:setcookie("visit ", "", time()-1);

常见问题解决:

1) 用 setcookie()时有错误提示,可能是因为调用setcookie()前面有输出或空格。也可能你的文

档是从其他字符集转换过来,文档后面可能带有 BOM 签名(就是在文件内容添加一些隐藏

的BOM 字符)。解决的办法就是使你的文档不出现这种情况。还有通过使用ob_start()函数

也能处理一点。

2) $_COOKIE 受magic_quotes_gpc 影响,可能自动转义。

3) 使用的时候,有必要测试用户是否支持cookie。

<?php

/* *

error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);//修改错误提示信息

ini_set('display_errors',true);//设置PHP错误提示

*/

if(!isset($_COOKIE['visit'])){

setcookie("visit","php",mktime()+86400,"/") or die("客户端禁止cookie");

echo "hellow first";

}else{

echo "second";

}

下面为一个完成的cookie操作类,供后期参考


<?php

class cookieclass{

private $cookiename;

private $cookievalue;

private $cookieexpiry;

public function __construct(){

$num_args = func_num_args();

if($num_args >0){

$args = func_get_args();

$this->cookiename = $args[0];

$this->cookievalue = $args[1];

$this->cookieexpiry = $args[2];

$this->cookieset();

}

}

//设置cookie

public function cookieset(){

try{

if($this->cookiename  !="" && $this->cookievalue !="" &&

$this->cookieexpiry !=""){

setcookie($this->cookiename,$this->cookievalue,time()+$this->cookieexpiry);

}else{

throw new exception("你必须对cookie设置个名字和过期时间");

}

}catch(exception $e){

echo $e->getmessage();

}

}

//修改cookie中指定的值

public function change($newvalue){

$_COOKIE[$this->cookiename] = $newvalue;

}

//取得需要的值

public function getvalue(){

return $_COOKIE[$this->cookiename];

}

//删除某个值

public function remove(){

$this->change("");

}

}

?>


//建立个COOKIE

$mycookie = new cookieclass("cookieid","php","60");

echo $mycookie->getvalue();