SESSION技术
session技术是一种基于cookie技术实现的会话技术,cookie是将数据保存在浏览器,而session将数据保存到服务器。
浏览器上的数据很容易暴露,或者被别人盗取,但是服务器认为相对浏览器,安全性要大幅提高。
session原理
操作session
操作步骤
1. 开启session
session_start:开启session
2. 将数据存放到session当中
a) 先将数据保存到预定义超全局变量$_SESSION中
b) 脚本执行结束,系统会自动将$_SESSION中的数据存放到session文件中(因为session_start)
系统临时文件夹
修改session存储的临时目录
效果
3. 跨脚本共享数据:凡是需要使用$_SESSION的地方(使用session)必须先开启session
开启session共享数据
4. session不用了之后,要去清理掉服务器端的session文件
session_destroy():这个是系统会自动的去清理掉当前会话对应的session文件,前提必须先开启session。
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所保存的文件。
session生命周期
session声明周期分为两种
sessionid的生命周期(cookie),默认的是浏览器关闭就失效,就会导致session文件不能访问
session文件本身的生命周期,session_start还会做一件额外的事情,就会尝试着去删除失效的session文件(gc:垃圾回收,概率性事件)
注意:大部分的网站说登录过期,是源于session文件过期,在session_start的时候会自动的删除这些过期的数据。
session配置项
自动开启session
session垃圾回收
session分层
因为session文件过多的情况下,session文件的查找效率会降低。
系统不能自动创建文件夹
手动创建
注意:一共需要创建35个子文件夹
一般情况下,如果一个网站的session文件比较多,而且读取比较频繁,会将session保存到内存(非关系型数据库),如果内存不是很足,就退而求其次,将session存放到关系型数据库。(session入库)
$_SESSION操作
$_SESSION不能存储索引数组
shop项目
用户登录跨脚本共享登录信息
1. 在用户登录之后,开启session,将用户的信息保存到$_SESSION中。/admin/privilege.php|act=check
2. 在需要使用session数据的脚本中,取出session信息,使用即可。/admin/index.php?act=top
3. 在对应的模板文件中去使用变量。/admin/templates/top.html
4. 将时间戳转换成时间。/admin/templates/top.html
登录成功更新用户信息
1. 在登录成功之后,调用相应的方法去修改用户上次登录信息。/admin/privilege.php|act=check
2. 增加对应更新用户信息的方法。/admin/includes/User.class.php
3. 传入当前要更新用户的id。/admin/privilege.php?act=check
4. 给父类增加更新方法db_update。/includes/DB.class.php
验证用户是否登录
1. 首页不能直接访问,必须要用户已经登录才能访问:如果有session文件,且文件中有user信息说明用户已经登录,否则没有登录。/admin/index.php
2. session_start在一个脚本中只能开启一次,去掉index.php中act=top中的session_start
退出系统
退出系统,将session文件给删除。
1. 给用户提供一个操作入口:点击事件,一个a标签中的url。/admin/templates/top.html
2. 处理用户动作请求:接收用户请求。采用$_REQUEST接收get和post提交的数据。/admin/privilege.php
3. 增加动作处理代码。/admin/privilege.php?act=logout