Cookie与Session的详细讲解

Cookie和Session是两种不同的存储机制。cookie是从一个web页到下一个页面的数据传递方法,存储在客户端;session是让数据在页面中持续有效的方法,存储在服务器端。两者对于web网站页面间信息传递的安全是性必不可少的。
一、Cookie 管理
1、cookie是一种在远程浏览器端存储数据并以此来跟踪和识别用户的机制。意思就是,cookie是web服务器暂时存放在用户硬盘上的一个文本文件,并随后被web浏览器读取,当用户再次访问web网站时,网站通过读取cookie文件记录这位访客的特定信息,从而迅速做出响应。
如果用IE浏览器访问web网站时,web服务器会自动以上述命令的格式生成相应的cookie文本文件,并存储在C盘的cookie文件夹中(如图)在这里插入图片描述
2、cookie常用的三个功能
记录访客的某些信息。(如:记录访客访问网页的次数;记录访客曾经输入过的信息;);
在页面之间传递变量。(如:用户声明一个变量,要把这个变量传递到另一个页面,那用户就可以把这个变量以cookie的形式保存下来,然后在下一个页面通过读取cookie来获取变量的值);
将所查看的Internet页存储在cookie文件夹中,可以提高以后的浏览速度;
3、创建Cookie
在PHP中,通过setcookie()函数 创建cookie(如图)在这里插入图片描述
运行上面的实例,在cookie文件夹下会自动生成一个cookie文件,cookie的有效时间为60秒,在cookie失效后,cookie文件自动删除。
4、读取Cookie
在PHP中可以用 $_COOKIE[] 来读取浏览器端的cookie值
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
5、删除Cookie
cookie被创建后,如果没有设置它的失效时间,其cookie文件会在关闭浏览器时被自动删除;如果想在关闭浏览器之前删除cookie,可通过setcookie()函数删除(重点讲解),也可以在浏览器中手动删除(不做讲解)。
在这里插入图片描述
只需要把时间函数 time()-1 当前时间减1秒即可。
6、cookie的生命周期
如果cookie不设定时间,也就是当浏览器关闭时,cookie才会自动消失,这种称为会话cookie,一般不保存在硬盘上,而是保存在内存中
如果设置cookie的失效时间,浏览器会吧cookie保存在硬盘中。
浏览器最多允许存储300个cookie文件,而且每个cookie最大容量为4KB,每个域名最多支持20个cookie,如果达到限制,浏览器会自动的随机删除cookie。

二、Session 管理
1、session的工作原理
对比cookie,session是存储在服务器端的会话,相对安全,并且不像cookie那样有存储长度的限制。在计算机专业术语中,session是指一个终端用户与交互系统进行通信的时间间隔,因此,session是一个特定的时间概念。当启动一个session会话时,会生成一个随机且唯一的session_id,也就是session的文件名,此时,session_id存储在服务器的内存当中,当关闭页面时,此id会自动注销,重新登录此页面,会再次生成一个随机且唯一的id。
2、session的功能
由于网页是一种无状态的连接程序,因此无法得知用户的浏览状态。通过session则可记录用户的有关信息,以供用户再次以此身份对Web服务器提交要求时作确认。
3、启动会话
启动PHP会话有两种:一种使用session_start()函数,一种是session_register()函数。
4、注册会话
会话变量被启动后,全部保存在数组$_SESSION中
在这里插入图片描述
5、使用会话
首先判断会话ID是否存在,若存在,则输出会话的值
在这里插入图片描述
6、删除会话
6-1、删除会话变量,同数组的操作一样,直接删除 $_SESSION 数组中的某个元素一样,使用unset()函数,即:unset( $ _SESSION[‘user’])。
6-2、如果想要一次性注销所有的会话变量,可以将一个空的数组赋值给 $_SESSION ,即: $_SESSION=array()。
6-3、结束当前会话,用session_distroy()函数,这样可以清空会话中的所有资源,彻底销毁session。即:session_distroy()
7、session通过cookie设置失效时间
7-1、使用session_set_cookie_params()函数设置失效时间 (一般不常用)
在这里插入图片描述
7-2、使用setcookie()函数设置session的失效时间
在这里插入图片描述
8、客户端禁止cookie
当客户端禁止cookie时,session页面传递会失效,解决这个问题有4中方法。
(1)、在登录之前提醒用户必须打开cookie。
(2)、设置php.ini 文件中的session.use_trans_sid = 1,或者编译时打开-enable-trans-sid选项,让PHP自动跨页面传递session_id。
(3)、通过GET方法,隐藏表单传递session-id。
(4)、使用文件或者数据库存储session-id,在页面传递中手动调用。

猜你喜欢

转载自blog.csdn.net/weixin_43860260/article/details/84841927