第十一章:第19节 PHP与MySQL——session其他介绍

更新于:2017-10-19 19:38:22

到这“会员管理系统”就结束不往下写了,有关session的内容继续再说几点:


1)Session使用语法问题


Session数据可以是任意的数据类型,就是因为,session数据区内的数据是序列化后才存储的!


$_SESSION数组元素的下标只能是字符串类型


做下演示:


1.png

当我们没有开启session时,“$_SESSION”只是一个普通的变量,


1.png

没有错误,当把15行注释去掉,开启session时,


1.png

出错了。


2)Session的销毁


(1)、session_destroy()函数可以起到销毁的作用,做下演示:


在1.php:

1.png


在2.php:

1.png


先访问1.PHP:


1.png


19行执行了session_destroy(),第22行依然可以打印出$_SESSION的值,那到底有没有把session真正的销毁了。


访问下2.php便知结果:


1.png

打印$_SESSION为空数组,从这个例子说明了session_destroy()函数可以删除当前session对应的数据区,关闭session机制!关闭session机制后,导致余下的session操作都不处理!但是$_SESSION的值在脚本结束前依然存在。


总结:session_destroy()关闭了session,$_SESSION变成了普通变量(失去了预定义变量的作用)。



(2)、session_unset()函数也可以起到销毁的作用。


两个文件中同样的代码,把session_destroy换成session_unset函数,看演示结果:


1.png

1.png


总结:从结果中可看出session_unset函数可以删除session对应的数据区,但它不关闭session机制!


(3)使用unset函数看看什么效果:


1.png


和使用session_unset函数效果一致。


可如果这样写呢:

1.png


访问1.php和上面一样

1.png

可访问2.PHP:


1.png


是不是挺奇怪,下标“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浏览器)


1.png


假如说有用户就是把浏览器的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

会话数据存储位置

浏览器

服务器端

安全性

数据传输量

支持会话数据量

有限制4k20

无限制

支持数据类型

字符串

All


本节学习代码》》》