PHP Session管理

原创
2016-08-08 09:21:04 635浏览
读取/设置当前缓存的到期时间
int session_cache_expire ([ string $new_cache_expire ] )
请求开始的时候,缓存到期时间会被重置为 180分钟,并且保存在 session.cache_expire 配置项中。 因此,针对每个请求,需要在 session_start() 函数调用之前 调用 session_cache_expire() 来设置缓存到期时间。如果给定 new_cache_expire ,就使用 new_cache_expire 的值设置当前缓存到期时间,以分钟为单位,默认值是 180 (分钟)。
读取/设置缓存限制器
string session_cache_limiter ([ string $cache_limiter ] )
缓存限制器定义了向客户端发送的 HTTP 响应头中的缓存控制策略。 客户端或者代理服务器通过检测这个响应头信息来 确定对于页面内容的缓存规则。 设置缓存限制器为 nocache 会禁止客户端或者代理服务器缓存内容, public 表示允许客户端或代理服务器缓存内容, private 表示允许客户端缓存, 但是不允许代理服务器缓存内容。在 private 模式下, 包括 Mozilla 在内的一些浏览器可能无法正确处理 Expire 响应头, 通过使用 private_no_expire 模式可以解决这个问题:在这种模式下, 不会向客户端发送 Expire 响应头。
获取/设置当前会话 ID
string session_id ([ string $id ] )
如果指定了 id 参数的值, 则使用指定值作为会话 ID。 必须在调用 session_start() 函数之前调用 session_id() 函数。 不同的会话管理器对于会话 ID 中可以使用的字符有不同的限制。 例如文件会话管理器仅允许会话 ID 中使用以下字符:a-z A-Z 0-9 , (逗号)和 - (减号) 。
读取/设置会话名称
string session_name ([ string $name ] )
session_name() 函数返回当前会话名称。 如果指定 name 参数, session_name() 函数会更新会话名称, 并返回 原来的 会话名称。请求开始的时候,会话名称会被重置并且存储到 session.name 配置项。 因此,要想设置会话名称,那么对于每个请求,都需要在 调用 session_start() 或者 session_register() 函数 之前调用 session_name() 函数。 会话名称至少需要一个字母,不能全部都使用数字, 否则,每次都会生成一个新的会话 ID。
读取/设置当前会话的保存路径
string session_save_path ([ string $path ] )
指定会话数据保存的路径。 必须在调用 session_start() 函数之前调用 session_save_path() 函数。 在某些操作系统上,建议使用可以高效处理 大量小尺寸文件的文件系统上的路径来保存会话数据。 例如,在 Linux 平台上,对于会话数据保存的工作而言,reiserfs 文件系统会比 ext2fs 文件系统能够提供更好的性能。
启动新会话或者重用现有会话
bool session_start ( void )
session_start() 会创建新会话或者重用现有会话。 如果通过 GET 或者 POST 方式,或者使用 cookie 提交了会话 ID, 则会重用现有会话。
销毁一个会话中的全部数据
bool session_destroy ( void )

session_destroy() 销毁当前会话中的全部数据, 但是不会重置当前会话所关联的全局变量, 也不会重置会话 cookie。 如果需要再次使用会话变量, 必须重新调用 session_start() 函数。为了彻底销毁会话,比如在用户退出登录的时候,必须同时重置会话 ID。 如果是通过 cookie 方式传送会话 ID 的,那么同时也需要 调用 setcookie() 函数来 删除客户端的会话 cookie。

1、session会判断当前是否有$_COOKIE[session_name()];session_name()返回保存session_id的COOKIE键值,这个值可以从php.ini找到。 如果不存在会生成一个session_id,然后把生成的session_id作为COOKIE的值传递到客户端.相当于执行了下面COOKIE 操作,注意的是,这一步执行了setcookie()操作,COOKIE是在header头中发送的,这之前是不能有输出的。PHP有另外一个函数 session_regenerate_id(), 如果使用这个函数,这之前也是不能有输出的。
setcookie(session_name(), session_id(), session.cookie_lifetime,//默认0
session.cookie_path,//默认'//m.sbmmt.com/m/'当前程序跟目录下都有效
session.cookie_domain,//默认为空
)
如果存在那么session_id =$_COOKIE[session_name()];然后去session.save_path指定的文件夹里去找名字为
'SESS_'.session_id()的文件.读取文件的内容反序列化,然后放到$_SESSION中.


2、比如新添加一个值$_SESSION['test'] ='blah'; 那么这个$_SESSION只会维护在内存中,当脚本执行结束的时候,把$_SESSION的值写入到session_id指定的文件夹中,然后关闭相关资源.

3、SESSION发出去的COOKIE一般属于即时COOKIE,保存在内存中,当浏览器关闭后,才会过期,假如需要人为强制过期,比如 退出登录,而不是关闭浏览器,那么就需要在代码里销毁SESSION,方法有很多:
1]. setcookie(session_name(),session_id(),time() -8000000,..);//退出登录前执行
2]. usset($_SESSION);//这会删除所有的$_SESSION数据,刷新后,有COOKIE传过来,但是没有数据。
3]. session_destroy();//这个作用更彻底,删除$_SESSION 删除session文件,和session_id。
当不关闭浏览器的情况下,再次刷新,2和3都会有COOKIE传过来,但是找不到数据。

";
    
    echo $_COOKIE[session_name()];    
    
    //// 重置会话中的所有变量 -- 使用unset可以重置某个会话变量
//    $_SESSION = array();    
//    // 同时删除会话 cookie
//    if (ini_get("session.use_cookies")) 
//    {
//        $params = session_get_cookie_params();
//        setcookie(session_name(), '', time() - 42000,
//            $params["path"], $params["domain"],
//            $params["secure"], $params["httponly"]);    
//    }
//    // 最后,销毁会话
//    session_destroy(); 
?>





无标题文档


版权声明:本文为博主郎涯工作室原创文章,未经博主允许不得转载。

以上就介绍了PHP Session管理,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。