PHP学习笔记:会话处理

来源:互联网 发布:家庭网络需要交换机吗 编辑:程序博客网 时间:2024/04/30 02:09
(部分采用了www.w3cschool.com的内容)
一.概述
会话的概念很宽,在PHP里主要指的是对无状态协议HTTP的一种强化解决方案。因为HTTP的每一次请求处理都是独立的,
彼此之间不存在依赖性,但是它们之间又往往具有现实意义上的逻辑联系。会话处理就是采用一系列的方案,来将这种
现实逻辑关系用技术保障起来,从而帮助无状态协议实现更复杂的功能。


会话处理的核心方法是为每位网站访问者分配一个SID,也就是会话ID的唯一标志属性,然后将此SID与任意数量的数据关联。
关键的方法主要有两种,一种是使用cookie,一种是采用URL重写。


二.配置指令
依然是在php.ini配置文件里进行设置。
另外,虽然配置很重要,但是这个东西有记录和大概印象就可以了,搭建的时候可以查手册。重点还是使用。
只列举几个比较重要的配置属性。


1.管理会话存储介质
session.save_hander = file|mm|sqlite|user
file 就是文件,mm是内存,sqlite是轻量级的数据库SQLite,user则是自定义选项。


PS:如果存储介质选为了文件file,则还需要设置会话文件路径session.save_path = string


2.设置会话名称
session.name = PHPSESSID  默认值,可以自定义修改。


3.选择会话方式
也就是选择使用cookie或者URL重写
session.use_cookies = 0|1
设置为1的时候则为使用cookie,否则使用URL重写。
如果使用cookie,那么系统自动会启动设置,而不需要再显示调用set_cookie();
如果使用URL重写,那么SID必须附加在URL的后面,可以手动进行添加,也可以启用指令session.use_tran_sid,使得系统自动为你添加。
所以,要么
session.use_cookies = 1;
或者
session.use_cookies = 0;
session.use_tran_sid = 1;
这样比较方便统一。


4.设置会话cookie生存期
session.cookie_lifetime = 秒数
实际上也可以不设置,而在php文件头里通过setcookie()的第三个参数进行手动设置。


5.设置会话生存期
session.gc_maxlifetime = 秒数 默认1440


三.处理会话


1.开始会话
因为HTTP不会记忆状态,所以每次对请求都要显式的启动或者恢复会话。
bool session_start();
该函数创建一个会话,或者继续当前会话。session_start() 函数必须位于 <html> 标签之前;
比如:
<?php session_start(); ?>


<html>
<body>


</body>
</html>



2.销毁会话
session_unset和session_destroy
前者删除存储在会话中的会话变量,后者则是彻底销毁所有数据。


3.设置、获取会话ID
string session_id(string sid)
如果有参数,则作用是将当前会话ID改为参数;若无参数,则返回当前ID。


4.关于会话变量
会话变量的作用是用来管理随用户一起从一个页面传到下一个页面的数据。使用 PHP $_SESSION 变量:


例如,设置变量
<?php
session_start();
// store session data
$_SESSION['views']=1;
?>


<html>
<body>


<?php
//retrieve session data
echo "Pageviews=". $_SESSION['views'];
?>


</body>
</html>



如果要删除的话,则使用unset函数,比如:
<?php
unset($_SESSION['views']);
?>



5.会话数据的存取
PHP以标准格式存储会话数据。每个会话变量用分号隔开,且每个会话变量由三部分组成:名、长度和值。
格式为: name|s:length:"value"
PHP会话会对这些会话数据进行一个编码和解码的操作,将所有会话变量编码为一个字符串
调用的函数是
session_encode()和session_decode()


比如它的效果就是
$_SESSION['username'] = "jason"
$_SESSION['loggedon'] = date("M d Y H:i:s");
session_encode();



编码之后它们就变成了如下的字符串:
username|s:5:"jason";loggedon|s:20:"Feb 16 2011 22:32:29"


解码的操作就正好是逆过程:
session_decode(string session_data)
这个session_data一般存在在某个存储介质上,参见设置的第一条。所以在解码前,先从介质上读取出来,
然后传递给这个函数就可以解码了。数据格式和 encode正好对应。


6.重新生成会话ID
这个应用最大的作用是为了保证安全,在不更换会话数据的前提下,动态的去变更会话ID,其目的是为了防止
会话过程遭受劫持会话的攻击。
函数bool session_regenerate_id()就可以重新为会话生成一个新的ID。

原创粉丝点击