PHP Session的生存周期与用法详解
发布:smiling 来源: PHP粉丝网 添加日期:2014-08-02 13:39:06 浏览: 评论:0
session 是一种服务器端用于存储有关用户会话信息的机制,服务器使用一种类似于散列表的结构,也可能就是使用散列表,来保存信息.
当程序需要为某个客户端的请求创建一个 session 的时候,服务器首先会检查这个客户端是否已经包含了一个 session 标识,这个我们称为 session id(获取方法为 session_id()),如果已包含一个 session id 则说明此客户端之前已经创建过 session,服务器则按照 session id 把这个 session 中的值检索出来,如果客户端不包含 session id,说明此客户端第一次请求服务器或手动清除过缓存文件,则为此客户端创建一个 session 并且生成一个与此 session 相关联的 session id,一般来说,session id 的值是不会重复的,并且加密的字符串,这个 session id 将被在本次响应中返回给客户端保存.
session 在何时被创建?
通常(是指通常)是在浏览器向服务器端第一次请求时被创建,并且它会占用一定的内存空间,因此在不必要的情况下,尽最关闭 session.
session 何时被删除
通常情况下,session 在会在这几种情况下被删除,一是使用 session_destroy() 重置函数手动删除,二是 session 的上次活动时间距离当前时间的间隔超过了 session 的超时设置的时间,三是服务器进程被停止.
怎么在浏览器关闭时删除 session
理论上来说,是做不到这一点,http是一种无状态协议,因此服务器不知道客户端什么时候关掉的浏览器,并且PHP也没有一个关相的函数来获取此项信息,但这个问题还可以得到解决,就是使用代码 window.oncolose 来监视浏览器的关闭动作,然后用Ajax向服务器端发送一个请求来删除 session,但这个办法也并不会完全解决问题,原因是在有些情况下比如浏览器崩溃、突然断电、用户死机等这些时候并不能作出反应。
在PHP中有关Session的函数比较多,不过我们最常用到的也就这么几个函数:
session_start(), session_register(),session_unregister(),
session_is_registered(),session_destroy函数.
session_start():启用session机制,在需要用到session的程序文件的最开始调用它.
session_register():注册session变量
session_unregister(): 删除session变量(一个一个删除)
session_is_registered(): 判断session变量是否注册
我们来看一下验证程序,假设数据库存储的是用户名和 md5 加密后的密码,代码如下:
- // 表单提交后...
- $posts = $_POST;
- // 清除一些空白符号
- foreach ($posts as $key => $value)
- {
- $posts[$key] = trim($value);
- }
- $password = md5($posts["password"]);
- $username = $posts["username"];
- $query = "SELECT `username` FROM `user` WHERE `password` = '$password'";
- // 取得查询结果
- $userInfo = $DB->getRow($query);
- if (!emptyempty($userInfo))
- {
- if ($userInfo["username"] == $username)
- {
- // 当验证通过后,启动 Session
- session_start();
- // 注册登陆成功的 admin 变量,并赋值 true
- $_SESSION["admin"] = true;
- }
- else
- {
- die("用户名密码错误");
- }
- }
- else
- {
- die("用户名密码错误");
- }
我们在需要用户验证的页面启动 Session,判断是否登陆,代码如下:
- // 防止全局变量造成安全隐患
- $admin = false;
- // 启动会话,这步必不可少
- session_start();
- // 判断是否登陆
- if (isset($_SESSION["admin"]) && $_SESSION["admin"] === true)
- {
- echo "您已经成功登陆";
- }
- else
- {
- // 验证失败,将 $_SESSION["admin"] 置为 false
- $_SESSION["admin"] = false;
- die("您无权访问");
- }
需要注意下面几个方面:
1.函数session_start()必须在程序最开始执行,在其前面不能有任何输出内容,否则就会出现“Warning:Cannot send session cookie - headers already sent"类似这样的警告信息.
2.函数session_register()用于注册要保存在session中的相关变量,其用法如下:
- <?php
- $val = "session value";
- session_register("val");
- ?>
val即为要注册的session变量名,在注册时一定不要加上"$"符号,只写其变量名称即可.
3.函数session_unregister()与上面函数用法完全相同,但功能相反,上面函数是注册session变量,而其则是删除指定的session变量.
4.函数session_is_registered()用于判断session变量是否注册.
5.函数session_destroy()主要用于在系统注销和退出时,销毁所有的session变量,它没有参数,直接调用即可.
Tags: PHP Session 生存周期
相关文章
- ·php简单设置与删除cookie代码(2013-11-13)
- ·phpmyadmin登录模式为http(2013-11-29)
- ·PHP购物车产生代码(2013-12-09)
- ·PHP中常见的Session问题(2013-12-09)
- ·php session工作原理分析(2014-01-03)
- ·Mysql存储PHP Session(2014-01-09)
- ·php中利用cookie实现购物车实例(2014-01-11)
- ·用PHP控制您的浏览器cache(2014-01-13)
- ·PHP如何读取COOKIES(2014-01-14)
- ·php $_COOKIE简单应用实例(2014-01-15)
- ·正确理解cookie和session机制原理(2014-02-10)
- ·php中session一些基础知识(2014-02-16)
- ·php中session学习笔记(2014-02-17)
- ·php中session与thinkphp中session的一些用法(2014-02-21)
- ·php中session实现保存用户登录信息(2014-03-11)
- ·php setcookie详解用法(2014-05-23)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)