到这“会员管理系统”就结束不往下写了,有关session的内容继续再说几点:
1)Session使用语法问题
Session数据可以是任意的数据类型,就是因为,session数据区内的数据是序列化后才存储的!
$_SESSION数组元素的下标只能是字符串类型。
做下演示:
当我们没有开启session时,“$_SESSION”只是一个普通的变量,
没有错误,当把15行注释去掉,开启session时,
出错了。
2)Session的销毁
(1)、session_destroy()函数可以起到销毁的作用,做下演示:
在1.php:
在2.php:
先访问1.PHP:
19行执行了session_destroy(),第22行依然可以打印出$_SESSION的值,那到底有没有把session真正的销毁了。
访问下2.php便知结果:
打印$_SESSION为空数组,从这个例子说明了session_destroy()函数可以删除当前session对应的数据区,关闭session机制!关闭session机制后,导致余下的session操作都不处理!但是$_SESSION的值在脚本结束前依然存在。
总结:session_destroy()关闭了session,$_SESSION变成了普通变量(失去了预定义变量的作用)。
(2)、session_unset()函数也可以起到销毁的作用。
两个文件中同样的代码,把session_destroy换成session_unset函数,看演示结果:
总结:从结果中可看出session_unset函数可以删除session对应的数据区,但它不关闭session机制!
(3)使用unset函数看看什么效果:
和使用session_unset函数效果一致。
可如果这样写呢:
访问1.php和上面一样
可访问2.PHP:
是不是挺奇怪,下标“a”竟然还存在。这个地方一定要注意,不要unset($_SESSION)这样操作。
了解了session的销毁函数,我们以后在做退出功能时,最好session_destroy()、session_unset()一块使用。
3)session长久有效
大家登陆过一些网站,有些网站的账户浏览器关闭就退出了。还有一些网站不喜欢每次都登录,它希望用户登录后可以长期有效。这就是我们要考虑的如何让session长久有效。
思路:
1、session是依靠cookie实现的,想让session保持多久有效,首先得一定要把记录sessionID的cookie有效期设置为大于或等于session的有效期。
2、假如是用memcache存储session的,设置好想要储存的有效期,尽量保证session的数据不要太大,不然session的数量变多,很容易超过memcache的存储上限。超过了上限,memcache就会覆盖掉某原先的一些session值。
3、cookie和session不能像memcache可以设置永久储存,所以cookie、session有效期可以设置一个很大的数来表示时间。
4)Cookie禁用,session是否可用?
所有浏览器都支持cookie这个功能的,默认都是打开的,有些浏览器是可以关闭的(如IE浏览器)
假如说有用户就是把浏览器的cookie功能关闭了,我们的网站是否还能用session存储数据?
答案是可以的。
没有了cookie,还可以用get方式。session的一大优点就是当客户端的cookie被禁用时会自动把session id附在url中,这样再通过session id就能记住session变量了。
不过这样安全性大大降低,用肉眼就能看到sessionID。
楠神做过验证,有些大网站(如优酷),我把cookie禁用了,就不能登录账户了。大网站都如此,所以说我们根本不用考虑用户把cookie禁用以后怎么办的问题。一般用户很少误操作把cookie禁用的(很多浏览器压根就没有禁用功能),禁用cookie的用户本身就知道cookie是用来做什么的,我们没必要为用户考虑太多。
5)Session pk cookie
联系:
都是实现会话的方法。
Session基于cookie。
差异:
cookie | session | |
会话数据存储位置 | 浏览器端 | 服务器端 |
安全性 | 低 | 高 |
数据传输量 | 大 | 小 |
支持会话数据量 | 有限制4k,20个 | 无限制 |
支持数据类型 | 字符串 | All |