20150116--Cookie+Session-02

SESSION技术

session技术是一种基于cookie技术实现的会话技术,cookie是将数据保存在浏览器,而session将数据保存到服务器。

浏览器上的数据很容易暴露,或者被别人盗取,但是服务器认为相对浏览器,安全性要大幅提高。

session原理

clip_image002

操作session

操作步骤

1. 开启session

session_start:开启session

clip_image004

2. 将数据存放到session当中

a) 先将数据保存到预定义超全局变量$_SESSION中

clip_image006

b) 脚本执行结束,系统会自动将$_SESSION中的数据存放到session文件中(因为session_start)

clip_image008

系统临时文件夹

clip_image010

修改session存储的临时目录

clip_image012

效果

clip_image014

3. 跨脚本共享数据:凡是需要使用$_SESSION的地方(使用session)必须先开启session

clip_image016

开启session共享数据

clip_image018

4. session不用了之后,要去清理掉服务器端的session文件

session_destroy():这个是系统会自动的去清理掉当前会话对应的session文件,前提必须先开启session。

clip_image020

session文件处理原理

session_start

1. 能够从cookie中读取sessionid,PHPSESSID

2. 如果读不到cookie,会自动的生成sessionid,并且将sessionid当做cookie保存到浏览器端

3. 能够初始化$_SESSION变量

4. 能够从sessionid对应的session文件去读取数据,将数据存放到$_SESSION中

5. session_start读取文件的时候,如果当前文件不存在,会自动创建

$_SESSION:保存数据

在脚本执行结束的时候,如果没有session_destroy(),那么系统会自动将$_SESSION里的数据写到session文件中。

session_destroy:组织系统将$_SESSION中的数据写入到文件,同时还能删除当前会话对应的sessionid所保存的文件。

clip_image022

session生命周期

session声明周期分为两种

sessionid的生命周期(cookie),默认的是浏览器关闭就失效,就会导致session文件不能访问

clip_image024

session文件本身的生命周期,session_start还会做一件额外的事情,就会尝试着去删除失效的session文件(gc:垃圾回收,概率性事件)

clip_image026

注意:大部分的网站说登录过期,是源于session文件过期,在session_start的时候会自动的删除这些过期的数据。

session配置项

自动开启session

clip_image028

session垃圾回收

clip_image030

session分层

因为session文件过多的情况下,session文件的查找效率会降低。

clip_image032

系统不能自动创建文件夹

clip_image034

手动创建

clip_image036

注意:一共需要创建35个子文件夹

一般情况下,如果一个网站的session文件比较多,而且读取比较频繁,会将session保存到内存(非关系型数据库),如果内存不是很足,就退而求其次,将session存放到关系型数据库。(session入库)

$_SESSION操作

$_SESSION不能存储索引数组

clip_image038

shop项目

用户登录跨脚本共享登录信息

1. 在用户登录之后,开启session,将用户的信息保存到$_SESSION中。/admin/privilege.php|act=check

clip_image040

2. 在需要使用session数据的脚本中,取出session信息,使用即可。/admin/index.php?act=top

clip_image042

3. 在对应的模板文件中去使用变量。/admin/templates/top.html

clip_image044

4. 将时间戳转换成时间。/admin/templates/top.html

clip_image046

登录成功更新用户信息

1. 在登录成功之后,调用相应的方法去修改用户上次登录信息。/admin/privilege.php|act=check

clip_image048

2. 增加对应更新用户信息的方法。/admin/includes/User.class.php

clip_image050

3. 传入当前要更新用户的id。/admin/privilege.php?act=check

clip_image052

4. 给父类增加更新方法db_update。/includes/DB.class.php

clip_image054

验证用户是否登录

1. 首页不能直接访问,必须要用户已经登录才能访问:如果有session文件,且文件中有user信息说明用户已经登录,否则没有登录。/admin/index.php

clip_image056

2. session_start在一个脚本中只能开启一次,去掉index.php中act=top中的session_start

clip_image058

退出系统

退出系统,将session文件给删除。

1. 给用户提供一个操作入口:点击事件,一个a标签中的url。/admin/templates/top.html

clip_image060

2. 处理用户动作请求:接收用户请求。采用$_REQUEST接收get和post提交的数据。/admin/privilege.php

clip_image062

3. 增加动作处理代码。/admin/privilege.php?act=logout

clip_image064

原文地址:https://www.cnblogs.com/lifushan/p/5419447.html