Session与PHP之session_start()

来源:互联网 发布:信息推广软件 编辑:程序博客网 时间:2024/05/24 07:22

Session与PHP之session_start()

 
官方手册:http://www.php.net/session_start
Web中的Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。因此从上述的定义中我们可以看到,Session实际上是一个特定的时间概念。
需要注意的是,一个Session的概念需要包括特定的客户端,特定的服务器端以及不中断的操作时间。A用户和C服务器建立连接时所处的Session同B用户和C服务器建立连接时所处的Session是两个不同的Session。

Session的工作原理
(1)当一个Session第一次被启用时,一个唯一的标识被存储于本地的cookie中。
(2)首先使用session_start()函数,PHP从Session仓库中加载已经存储的Session变量
(3)当执行PHP脚本时,通过使用session_register()函数注册Session变量
(4)当PHP脚本执行结束时,未被销毁的Session变量会被自动保存在本地一定路径下的Session库中,这个路径可以通过php.ini文件中的session.save_path指定,下次浏览网页时可以加载使用。

Session存储在服务器端,默认情况下,php.ini 中设置的 Session 保存方式是files(session.save_handler = files),即使用读写文件的方式保存Session数据,而Session文件保存的目录由 session.save_path 指定,文件名以 sess_ 为前缀,后跟SessionID,如:sess_c72665af28a8b14c0fe11afe3b59b51b。文件中的数据即是序列化之后的Session数据了。
如果访问量大,可能产生的Session文件会比较多,这时可以设置分级目录进行Session文件的保存,效率会提高很多,设置方法为:session.save_path="N;/save_path",N为分级的级数,save_path 为开始目录。
当写入Session数据的时候,PHP会获取到客户端的SessionID,然后根据这个SessionID到指定的Session文件保存目录中找到相应的Session文件,不存在则创建之,最后将数据序列化之后写入文件。读取Session数据是php中的Session与Cookie。
在PHP开发中对比起Cookie,Session是存储在服务器端的会话,相对安全,并且不像Cookie那样有存储长度限制,本文简单介绍Session的使用。
由于Session是以文本文件形式存储在服务器端的,所以不怕客户端修改Session内容。实际上在服务器端的Session文件,PHP 自动修改Session文件的权限,只保留了系统读和写权限,而且不能通过 ftp修改,所以安全得多。
对于Cookie来说,假设我们要验证用户是否登陆,就必须在Cookie中保存用户名和密码(可能是 md5加密后字符串),并在每次请求页面的时候进行验证。如果用户名和密码存储在数据库,每次都要执行一次数据库查询,给数据库造成多余的负担。因为我们并不能只做一次验证。为什么呢?因为客户端Cookie中的信息是有可能被修改的。假如你存储 $admin 变量来表示用户是否登陆,$admin 为 true的时候表示登陆,为false的时候表示未登录,在第一次通过验证后将$admin等于true存储在Cookie,下次就不用验证了,这样对么?错了,假如有人伪造一个值为 true 的 $admin变量那不是就立即取的了管理权限么?非常的不安全。
而Session就不同了,Session是存储在服务器端的,远程用户没办法修改Session文件的内容,因此我们可以单纯存储一个 $admin 变量来判断是否登陆,首次验证通过后设置 $admin 值为true,以后判断该值是否为 true,假如不是,转入登陆界面,这样就可以减少很多数据库操作了。而且可以减少每次为了验证Cookie而传递密码的不安全性了(Session验证只需要传递一次,假如你没有使用SSL安全协议的话)。即使密码进行了 md5加密,也是很容易被截获的。
当然使用Session还有很多优点,比如控制容易,可以按照用户自定义存储等(存储于数据库)。我这里就不多说了。也是类似的操作流程,对读出来的数据需要进行解序列化,生成相应的Session变量。
用$_SESION之前必须要session_start()----其中之一的功能,$_SESSION是服务器端的cookie,相当一个大数组(浏览器关闭前,和Session销毁前),$_SESSION中的数据可以一直用(除了重新赋值)。$_SESSION 好比一个数组 $_SESSION['name'] = 'caocao'这好比在数组中加了一个元素,相当于$_SESSION = array("name"=>"caocao")使用的时候 还要使用$_SESSION['name'] 才能得到'caocao'。

原创粉丝点击