PHP Session操作

PHP Session简介
PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置。Session 变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的。
PHP Session 变量
您在计算机上操作某个应用程序时,您打开它,做些更改,然后关闭它。这很像一次对话(Session)。计算机知道您是谁。它清楚您在何时打开和关闭应用程序。然而,在因特网上问题出现了:由于 HTTP 地址无法保持状态,Web 服务器并不知道您是谁以及您做了什么。
PHP session 解决了这个问题,它通过在服务器上存储用户信息以便随后使用(比如用户名称、购买商品等)。然而,会话信息是临时的,在用户离开网站后将被删除。如果您需要永久存储信息,可以把数据存储在数据库中。
Session 的工作机制是:为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,或者通过 URL 进行传导。
php 基本操作
在您把用户信息存储到 PHP session 中之前,首先必须启动会话。
注释:session_start() 函数必须位于 标签之前

<?php
session_start();
$session_id = session_id(); //获取session_id 不指定随机生成
$session_name = session_name(); //获取session_name 默认PHPSESSID
$_SESSION['name']= 'zhangsan'; //储存session数据
$name = $_SESSION['name'];  //获取session数据
unset($_SESSION['name']); //删除指定session数据
session_regenerate_id(); //生成新的session_id
 session_destroy(); //删除整个session
?>

注释:session_destroy() 将重置 session,您将失去所有已存储的 session 数据。
cookie流程:
1 服务端setcookie(); 调用以后响应头设置set_cookie
2 客户端接收到响应头以后 在本地存储cookie 下次请求会在请求头本地的cookie
3 服务端收到请求头以后 通过全局变量$_COOKIE获取请求头的cookie 信息
session流程:
1 服务端session_start();开启会话 进行session操作
2 如果需要重置自己的seesion_name和session_id 在session_start开启前重置
3 服务端响应头设置set_cookie session_name:session_id
4 客户端接受响应头 将session_id以cookie形式存储到客户端
5 客户端请求带上cookie,服务端接受到请求以cookie中的session_id进行检索服务器的session文件 获取数据。

<?php
session_id('session_id');  //设置session_id
session_name('session_name'); //设置session_name
session_start(); //开启会话

设置session_id和session_name 必须在session_start()前 否则报错
SESSION的生存时间
如果我们没有设置session的生成时间,在配置文件中默认的生存时间是1440秒
但是有时候时间到了不会马上进行删除,跟PHP回收机制有关,"回收机制"在每个session初始化发生是一个概率事件,这个概率是由以下公式得出的:
gc_probability除以gc_divisor。如果gc_probability值为1,gc_divisor值为100,那么触发“回收机制”的概率为1%。
就意味着可能有100次php请求,可能才会有一次触发“回收机制”的可能性。所以说如果session已经过期了,但是没有
触发到“回收机制”,session文件还没有被删除,那session就是还有效的。
如果需要很精准的触发“回收机制”,让session已过期马上删除,就把以上两个值都设置为1.
设置session的生存时间

1.修改php.ini中session在服务端的过期时间

#session的超时时间
session.gc_maxlifetime = 1440
 

2 设置sessionid 在客户端生存时间

<?php
/**
* 下面只是设置了保存sessionid的那个时间,这样的结果是关闭浏览器后session仍可以用
* 实际并没有改变session的生存时间,如果session已经过期,这也就没有意义了
*/

//只会在用户第一次访问的时候设置保存sessionid的那个cookie的过期时间
$lifetime=600;
session_set_cookie_params($lifetime);#注意到放到start的前面
session_start();
 

php.ini中的session配置说明

session.save_handler = ”files”  默认以文件方式存取session数据,如果想要使用自定义的处理器来存取session数据,比如数据库,用”user”。

session.use_cookies = 1  是否使用cookies在客户端保存会话sessionid,默认为采用cookies  
 session.use_only_cookies = 0  是否仅仅使用cookie在客户端保存会话sessionid,这个选项可以使管理员禁止用户通过URL来传递id,默认为0,如果禁用的话,客户端如果禁用Cookie将使session无法工作。  
session.name = “PHPSESSID”  当做cookie name来使用的session标识名  
session.auto_start = 0  是否自动启动session,默认不启动,我们知道在使用session功能时,我们基本上在每个php脚本头部都会通过session_start()函数来启动session,如果你启动这个选项,则在每个脚本头部都会自动启动session,不需要每个脚本头部都以session_start()函数启动session,推荐关闭这个选项,采用默认值。  
 session.cookie_lifetime = 0  传递sessionid的Cookie有效期(秒),0表示仅在浏览器打开期间有效。  
 session.gc_probability = 1  
 session.gc_divisor = 100  定义在每次初始化会话时,启动垃圾回收程序的概率。计算公式如下:session.gc_probability/session.gc_divisor,比如1/100,表示有1%的概率启动启动垃圾回收程序,对会话页面访问越频繁,概率就应当越小。建议值为1/1000~5000。  
session.gc_maxlifetime = 1440  设定保存的session文件生存期,超过此参数设定秒数后,保存的数据将被视为’垃圾’并由垃圾回收程序清理。判断标准是最后访问数据的时间(对于FAT文件系统是最后刷新数据的时间)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值