session处理机制

session处理机制

1.php中的session处理机制主要用于记录用户信息。
  
2.session是指用户在浏览某个网站时,从进入网站第一个网页开始到浏览器关闭所经历的时间段,当它在服务端完成响应后,服务器就失去与客户端浏览器的联系,从这点而言,session是一个特定的时间概念,它能够存储当前浏览器窗口打开的任何窗口的用户信息,这段有始有终的一系列动作称为会话。
  
由于http协议是一种无状态协议,无法得知用户的浏览状态,session的出现填补了http协议的局限。
  
3.相比cookie,session存储在服务器端,相对安全,易于控制,在定制过程中可以使用数据库进行存储,不用担心客户端对session内容进行修改。
  
在服务器端的session文件,php能够自动修改session文件的读写权限,但是不能通过ftp进行修改,而且也不像cookie那样有存储长度的限制。
  
即使在cookie-ies客户端的浏览器被禁用,session仍可以通过URL重写技术,在服务器端将该用户的session d附带在URL上进行传递,如:http://127.0.0.1/index.php?PHPSESSD=c72665af28a8b14c0fe61afe3b5951b。
  
4.session的原理及使用方法:

session的工作原理:用户在客户端登陆网站时,被访问的PHP页面使用session_start()函数启动session,产生客户端唯一标识session d(使用函数session_id()设置),当请求下一个页面时,PHP程序通过两种方式来获取客户端的session d:一种是cookie被禁用时,将session d自动加入到GET或POST的URL中,默认情况下,变量名为PHPSESSD(在php.ini中的设置session name=PHPSESSD);另一种方式是通过cookie,将session d 保存在cookie中

保存在服务器端的session数据,不是保存在服务器端的内存中,而是保存在文件或数据库中。默认情况下配置服务器端的php设置(php.ini),通过文件的方式保存(session save_hander=files),使用读写文件的方式保存session数据,session文件保存的目录由session save_path指定,如:文件名为 sess_c72665af28a8b14c0fc61afeb59b51b,文件中的数据即是序列化之后的session数据,如果访问量大,还可能产生多个session文件,这时可以设置分级目录保存session文件。

session save_path="N;/save_path"(N为分级的级数,save_path为开始目录)。对session数据写入时,PHP获得客户端的session d,然后跟随session d到指定的session文件保存目录中找到相应的session文件不存在则创建,最后将数据序列化之后写入文件。读取session数据是类似的流程,对读出来的数据需要进行解序列化,生成相应的session变量。

用户在浏览网页时,用户的session会话开始,如果客户端的浏览器支持cookie,将会建立一个session的id到cookie,这个唯一的id由PHP随机生成,并且使用md5加密。客户端的cookie应该叫做session cookie,因为这个cookie是不会写入客户端的硬盘中,当一个session期结束的时候,该cookie也自动删除,如果客户端的浏览器禁cookie,session的id将会放入URL中进行传递。

session文件内存放着用户的相关信息,如:用户认证、认证时间、用户权限和其他信息。session文件的结构为:
变量名|类型:长度:值。

5.php中session处理的定制

在使用session功能时,我们通常使用下面三个函数:session_start()、session_register()、session_isregistered()。但针对特定情况对session进行定制,需要添加更多的session函数:

sess_open($sess_path,$session_name);
用于session处理程序调用来做初始化工作。参数$sess_path对应php.ini文件中的session save_path选项,参数$session_name对应php.ini中的session name选项。

sess_close():
在页面结束执行并且session处理程序需要关闭时被调用

sess_read($key):
在session处理程序读取指定session键值($key)时,检索并返回标识为$key的session数据.(序列化是将变量或对象在程序结束或需要时保存在文件中,在下次程序运行或需要时再调入内存的技术,有别于之保存数据的方法)

sess_write($key,$val):
该函数在session处理程序需要将数据保存时调用,这种情况经常在程序结束时发生。它负责将数据保存在下次能用session_read($key)函数检索的地方

session_destroy($key):
该函数在需要销毁session时,它负责删除session并且清楚环境

sess_gc($maxlifetime):
该函数负责清理碎片,删除过时的session数据。session处理程序会偶尔调用它们

定制程序通过mysql数据库或DBM文件保存session数据,根据具体的情况决定,一般情况下使用mysql数据库,就需要进行如下的步骤:
第一步:首先在mysql中创建一个sessions数据表,并且创建sessions表
第二步:定制函数
session_set_save_handler("sess_open","sess_close","sess_read","sess_write","sess_destroy","sess_gc");

6.$SESS_LIFE=get_cfg_var("session gc_maxlifetime");///php.ini内的session时间设置

7.session的实现中采用cookie技术,session会在客户端保存一个包含session_id(SESSION编号)的cookie;在服务器端保存其它session变量,比如session_name等等。当用户请求服务器时也把session_id一起发送到服务器,通过session_id提取所保存在服务器端的变量,就能识别用户是谁了。同时也不难理解为什么SESSION有时会失效了。

当客户端禁用cookie时,session_id将无法传递,此时SESSION失效。不过php5在linux或unix平台可以自动检测cookie状态,如果客户端设置了禁用,则系统自动把session_id附加到url上传递,windows主机则无此功能。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值