cookie和session笔记

1、http协议是无连接的,即每一次http请求都是新的,和上一次没有联系,这不利于和用户的交互。针对这一缺点产生了cookie。

2、cookie是一段保存在客户端上的验证信息,同一个域使用同一个cookie来保存,当访问该域名时由浏览器将所有存储的cookie信息一起发送到服务器端以便验证。当然浏览器也可以接受新设置和更改cookie数据。如下图:

cookie可以分成两类:1、硬盘cookie->persistent cookie;2、内存cookie->session cookie。

硬盘cookie保存在硬盘中,需要超时或者用户手动清理;内存cookie通常是session生成的,没有设置超时时间,所以保存在内存中,当浏览器关闭就会删除(除旧版本ie外)

那cookie保存在哪了?由于没有硬性规定,所以每个浏览器都有自己的保存方式和地点,这也就导致在不同浏览器上cookie信息是不通用的。

参考:http://zh.wikipedia.org/zh-cn/Cookie

http://www.cnblogs.com/haoxinyue/archive/2012/05/01/2478187.html

http://blog.51yip.com/php/938.html

3、由于cookie的一系列的缺点,所以又产生了session来验证用户,最主要的不同是session会以文件形式保存在服务器端,只在客户端保留一个凭证——就是session id,也就是这个session文件的文件名,而这个凭证默认是以cookie形式保存的

当用户禁用cookie时会以其他方式(通常为get方式在url中)传递session id:1、修改php配置,2、手动在url中添加

session有效期问题

参考:http://fukun.org/archives/03251929.html

http://lavasoft.blog.51cto.com/62575/275589/

http://koda.iteye.com/blog/319605

4、session和cookie是独立于编程语言而存在的,各种语言都可以使用,例如php中用函数处理,而Java中用对象处理。对于在php中的处理可以参考thinkPHP中的session(),cookie(),位于function.php中。这里简述session()的操作:

  0、首先是在php.ini中有session的配置信息,如果有条件修改配置文件可以直接修改,否则见下
  1、session初始化操作:session会进行两部分工作:一是生成session文件(使用原生session函数进行设置),二是生成session cookie(使用ini_set 函数设置)。
  2、session操作:启动,暂停,销毁,重新生成id,
  3、php中对session具体操作是使用$_SESSION数组,所以还包括对该数组的处理

参考:http://www.thinkphp.cn/document/137.html

原文地址:https://www.cnblogs.com/songfeilong2325/p/4328710.html