Maison > Article > développement back-end > PHP Session管理
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,//默认'/'当前程序跟目录下都有效
session.cookie_domain,//默认为空
)
如果存在那么session_id =$_COOKIE[session_name()];然后去session.save_path指定的文件夹里去找名字为
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传过来,但是找不到数据。
<?php // 初始化会话 session_name('Session_test'); session_id('safdsadfasdfsadfasdf'); session_start(); $_SERVER['user'] = 'admin'; echo $_SERVER['user']."<br>"; 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(); ?> <meta charset="utf-8"> <title>无标题文档</title>
版权声明:本文为博主郎涯工作室原创文章,未经博主允许不得转载。
以上就介绍了PHP Session管理,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。