cookie 和session
2015-08-14 10:23
253 查看
Cookie的配置与应用
Setcookie(string name, string value, int expire,string path, string domain, int secure);
其中name是cookie变量名称标识,你在php中将能象使用普通变量名相同来用他引用cookie变量。value是cookie变量的初始值,expire 表示该cookie变量的有效时间;path 为该cookie变量的相关路径;domain 表示cookie变量的网站;secure 则需在 https 的安全传输时才有效。
SetCookie("Cookie", "cookievalue",time()+3600, "/forum", ".100.com", 1);
接收和处理Cookie
PHP对Cookie的接收和处理的支持非常好,是完全自动的,跟FORM变量的原则一样,特别简单。
比如设置一个名为 MyCookier的Cookie,PHP会自动从WEB服务器接收的HTTP头里把它分析出来,并形成一个与普通变量一样的变量,名为$ myCookie,这个变量的值就是Cookie的值。数组同样适用。另外一个办法是引用PHP的全局变量$HTTP_COOKIE_VARS数组。
分别举例如下:(假设这些都在以前的页面里设置过了,并且仍然有效)
删除Cookie
要删除一个已经存在的Cookie,有两个办法:
1、SetCookie("Cookie", "");
2、SetCookie("Cookie", "value" , time()-1 / time() );
使用Cookie的限制注意事项:
1、必须在HTML文件的内容输出之前设置;
2、不同的浏览器对Cookie的处理不一致,且有时会出现错误的结果。
3、限制是在客户端的。一个浏览器能创建的Cookie数量最多为30个,并且每个不能超过4KB,每个WEB站点能设置的Cookie总数不能超过20个。
4、cookie 的值只能用字符串,不能是数组等数据类型
Session介绍
Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器创建生成一个唯一的sessionID,用该sessionID为标识符来存取服务器端的Session存储空间,在会话期间,分配给客户端的唯一sessionID,用来标识当前用户,与其他用户进行区分。通过SessionID接受每一次访问的请求,从而识别当前用户,跟踪和保持用户的具体资料,以及session变量,可在session中存储数字或文字资料.比如session_name.这些信息都保存在服务器端。当然,sessionID也可以作为会话信息保存到数据库中,进行session持久化。这样可以跟踪用户的登陆次数、在线与否、在线时间等从而维护HTTP无状态事物之间的关系。session的内容存储是键值对的列表,键是字符串类型,session的存储更方便,值可以是对象。
在session会话期间,session会分别保存在客户端和服务器端两个文件,客户端可以是cookie方式保存的sessionID(默认的保存方式)或通过url字符串形式传递。服务器端一般以文本的形式保存在指定的session目录中。在服务器端我们可以通过session.use_cookies来控制客户端使用哪一种保存方式。如果定义为cookie保存方式,我们可以通过session.cookie_lifetime(默认值0,闭浏览器就清除)来控制被保存在client上的cookie的有效期。
功能:初始化Session,也标识着session生命周期的开始。要使用session,必须初始化一个session环境,有点类似于OOP概念中调用构造函数构创建对象实例一样。session初始化操作,声明一个全局数组$_SESSION,映射寄存在内存的session数据。如果session文件已经存在,并且保存有session数据,session_start()则会读取session数据,填入$_SESSION中,开始一个新的session生命周期。
说明:这个函数没有参数,且返回值为true,如果使用基于cookie的sessin,那么在session_satrt()之前不能有任何的输出,包括空白
如果在php.ini中session.auto_start=1开启,则在每个页面执行session_start(),不需要手工设置,该选项默认为关闭状态,开启后不能将对象放入session中。
Session ID:
用户session唯一标识符,随机生成的一串字符串,具有唯一性,随机性。主要用于区分其它用户的session数据。用户第一次访问web页面的时候,php的session初始化函数调用会分配给当前来访用户一个唯一的ID,也称之为session_id。
设置SESSION的生命周期:
php session是基于cookie的,所以要设置session的生命周期,首先要设置cookie的失效时间。因为在客户端(如浏览器)登录网站时,SESSION 是否有用,首先找客户端是否有 COOKIE,通过COOKIE 中的 SESSION ID 去找服务器上的文件。
session_start();
$lifeTime = 24 * 3600; // 保存一天
setcookie(session_name(), session_id(), time() + $lifeTime, "/");
PHP5 Session还提供了一个函数 session_set_cookie_params(); 来设置PHP5 Session的生存期的,该函数必须在 session_start() 函数调用之前调用。
在服务器端,php如何判断session文件是否过期?
session.gc_maxlifetime = 1440 (初始值)
#设置session存活时间,单位是秒。每次GC启动后, 会通过stat得到session文件最后访问的unix时间,通过现在时间减去文件最后访问时间之间大于session.gc_maxlifetime,则会删除该文件。
关于cookie 和session 的有效期:
cookie 是存在客户端的。一般如果没有设置有效期,浏览器默认关闭cookie就消失。也就是说其浏览器把cookie值是存在一个变量上。若是设置了有效期,则cookie的数据是存在文件上,只要在其有效期内,cookie永久不失效。
而session 相当于是会话的cookie(浏览器关闭,数据消失).所以session有效期要结合sessionID 和 session数据结果。若想延长session 则必须延长sessionID时间,和 session数据时间。要使session有限期延长,则要设置客户端的sessionID ,函数session_set_cookie_params(time()+86400,'/','www.xxxx.com'),并session 数据 设置验证(默认为1440s,24分钟)ini_set('session.gc._maxlifetime',86400)。
如何修改SESSION的生存时间?
要注意这里的生存时间指的是什么? 由于session默认是基于cookie的,也就是说使用session会话技术,首先是将session数据保存到服务器端,其次会将sessionID 保存到浏览器端,保存在服务器端的session文件生命周期由php.ini中的session.gc_maxlifetime、gc_probability和gc_divisor来决定,而保存在客户端的sessionID由客户端cookie来决定,sessionID默认其生存周期直到浏览器关闭,它也可以通过php.ini中的设置session.cookie_lifetime 来控制,二者共同来决定session 的生存时间,二者中的其中任意一个失效了,就会造成session失效,要根据自己的需求来决定是要从哪方面来修改其生存时间。Session数据默认是session.gc_maxlifetime=1440s(默认是24分钟),可以用:
ini_set(‘session.gc._maxlifetime’,86400);//设置session数据的有效时间。
session_set_cookie_params(time()+86400);//设置的是sessionID有效时间。
或是用setcookie(session_name(),session_id(),time()+86400,’/’)来设置sessionID有效时间
参考1:浏览器不关闭,并将php.ini中的session.gc_maxlifetime设置为9999重启apache
cookie机制和session机制的区别
具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。
同时我们也看到,由于在服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择。
session与cookie最大的区别是:
Session采用键值对 , 也就是说ID存放客户端 , 而值放在服务器端 , 是通过用户的ID去找服务器上对应的值 , 这种方式值放置在服务器端 ,有个时间限制 ,时间到则服务器自动释放.
cookie
Cookies则有两种方法 , 一种方法是把值保存在浏览器的变量中 , 当浏览器关闭时结束 , 另一种方法是保存在硬盘中 , 只要时间不过期 , 下次还可使用.
一,session是将session信息保存在服务器上,并通过一个session ID来传递客户端的信息,同时服务器接收到session ID 后,根据这个ID来提供相关的sesion信息资源
二,cookie是将所有的信息以文本的形式保存在客户端,并由浏览器进行管理和维护
三,由于session为服务器存储,所有远程用户无法修改session文件的内容,而cookie
为客户端存储,所有session要比cookie安全的多,当然还有很多优点,如控制容易,可以按照客户自定义存储等(存储于数据库)...
cookie 和session 的区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、所以建议:
将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中
会话cookie和持久cookie的区别
如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。
如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。
存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式。
cookie与session之间的区别与联系
相同点:都可以在解决HTTP无状态的问题,使同一个客户端在访问网站的多次请求中,可以保存,设置信息,并且在请求事物之间建立联系。
不同点:简单的说cookie的信息保存在客户端,session的信息保存在服务器端。
Session采用键值对,也就是说ID存放客户端,而值放在服务器端,是通过用户的ID去找服务器上对应的值,这种方式值放置在服务器端,有个时间限制,时间到则服务器自动回收/释放。
Cookies则有两种方法,一种方法是把值保存在浏览器的变量中,当浏览器关闭时结束,另一种方法是保存在硬盘中,只要时间不过期,下次还可使用。
联系:当客户端使用基于Cookie方式保存的SessionID时,SessionID一般保存在cookie中。
备注:cookie在相同内核的浏览器之间是共享的,不同内核浏览器是不共享的例如火狐和IE(存放位置都不同,当然不共享)。不同内核浏览器不能共享cookie,也会产生不同sessionid。
拓展:http://www.jb51.net/article/55703.htm
http://www.cnblogs.com/acpp/archive/2011/06/10/2077592.html
Setcookie(string name, string value, int expire,string path, string domain, int secure);
其中name是cookie变量名称标识,你在php中将能象使用普通变量名相同来用他引用cookie变量。value是cookie变量的初始值,expire 表示该cookie变量的有效时间;path 为该cookie变量的相关路径;domain 表示cookie变量的网站;secure 则需在 https 的安全传输时才有效。
SetCookie("Cookie", "cookievalue",time()+3600, "/forum", ".100.com", 1);
接收和处理Cookie
PHP对Cookie的接收和处理的支持非常好,是完全自动的,跟FORM变量的原则一样,特别简单。
比如设置一个名为 MyCookier的Cookie,PHP会自动从WEB服务器接收的HTTP头里把它分析出来,并形成一个与普通变量一样的变量,名为$ myCookie,这个变量的值就是Cookie的值。数组同样适用。另外一个办法是引用PHP的全局变量$HTTP_COOKIE_VARS数组。
分别举例如下:(假设这些都在以前的页面里设置过了,并且仍然有效)
删除Cookie
要删除一个已经存在的Cookie,有两个办法:
1、SetCookie("Cookie", "");
2、SetCookie("Cookie", "value" , time()-1 / time() );
使用Cookie的限制注意事项:
1、必须在HTML文件的内容输出之前设置;
2、不同的浏览器对Cookie的处理不一致,且有时会出现错误的结果。
3、限制是在客户端的。一个浏览器能创建的Cookie数量最多为30个,并且每个不能超过4KB,每个WEB站点能设置的Cookie总数不能超过20个。
4、cookie 的值只能用字符串,不能是数组等数据类型
Session介绍
Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器创建生成一个唯一的sessionID,用该sessionID为标识符来存取服务器端的Session存储空间,在会话期间,分配给客户端的唯一sessionID,用来标识当前用户,与其他用户进行区分。通过SessionID接受每一次访问的请求,从而识别当前用户,跟踪和保持用户的具体资料,以及session变量,可在session中存储数字或文字资料.比如session_name.这些信息都保存在服务器端。当然,sessionID也可以作为会话信息保存到数据库中,进行session持久化。这样可以跟踪用户的登陆次数、在线与否、在线时间等从而维护HTTP无状态事物之间的关系。session的内容存储是键值对的列表,键是字符串类型,session的存储更方便,值可以是对象。
在session会话期间,session会分别保存在客户端和服务器端两个文件,客户端可以是cookie方式保存的sessionID(默认的保存方式)或通过url字符串形式传递。服务器端一般以文本的形式保存在指定的session目录中。在服务器端我们可以通过session.use_cookies来控制客户端使用哪一种保存方式。如果定义为cookie保存方式,我们可以通过session.cookie_lifetime(默认值0,闭浏览器就清除)来控制被保存在client上的cookie的有效期。
功能:初始化Session,也标识着session生命周期的开始。要使用session,必须初始化一个session环境,有点类似于OOP概念中调用构造函数构创建对象实例一样。session初始化操作,声明一个全局数组$_SESSION,映射寄存在内存的session数据。如果session文件已经存在,并且保存有session数据,session_start()则会读取session数据,填入$_SESSION中,开始一个新的session生命周期。
说明:这个函数没有参数,且返回值为true,如果使用基于cookie的sessin,那么在session_satrt()之前不能有任何的输出,包括空白
如果在php.ini中session.auto_start=1开启,则在每个页面执行session_start(),不需要手工设置,该选项默认为关闭状态,开启后不能将对象放入session中。
Session ID:
用户session唯一标识符,随机生成的一串字符串,具有唯一性,随机性。主要用于区分其它用户的session数据。用户第一次访问web页面的时候,php的session初始化函数调用会分配给当前来访用户一个唯一的ID,也称之为session_id。
设置SESSION的生命周期:
php session是基于cookie的,所以要设置session的生命周期,首先要设置cookie的失效时间。因为在客户端(如浏览器)登录网站时,SESSION 是否有用,首先找客户端是否有 COOKIE,通过COOKIE 中的 SESSION ID 去找服务器上的文件。
session_start();
$lifeTime = 24 * 3600; // 保存一天
setcookie(session_name(), session_id(), time() + $lifeTime, "/");
PHP5 Session还提供了一个函数 session_set_cookie_params(); 来设置PHP5 Session的生存期的,该函数必须在 session_start() 函数调用之前调用。
在服务器端,php如何判断session文件是否过期?
session.gc_maxlifetime = 1440 (初始值)
#设置session存活时间,单位是秒。每次GC启动后, 会通过stat得到session文件最后访问的unix时间,通过现在时间减去文件最后访问时间之间大于session.gc_maxlifetime,则会删除该文件。
关于cookie 和session 的有效期:
cookie 是存在客户端的。一般如果没有设置有效期,浏览器默认关闭cookie就消失。也就是说其浏览器把cookie值是存在一个变量上。若是设置了有效期,则cookie的数据是存在文件上,只要在其有效期内,cookie永久不失效。
而session 相当于是会话的cookie(浏览器关闭,数据消失).所以session有效期要结合sessionID 和 session数据结果。若想延长session 则必须延长sessionID时间,和 session数据时间。要使session有限期延长,则要设置客户端的sessionID ,函数session_set_cookie_params(time()+86400,'/','www.xxxx.com'),并session 数据 设置验证(默认为1440s,24分钟)ini_set('session.gc._maxlifetime',86400)。
如何修改SESSION的生存时间?
要注意这里的生存时间指的是什么? 由于session默认是基于cookie的,也就是说使用session会话技术,首先是将session数据保存到服务器端,其次会将sessionID 保存到浏览器端,保存在服务器端的session文件生命周期由php.ini中的session.gc_maxlifetime、gc_probability和gc_divisor来决定,而保存在客户端的sessionID由客户端cookie来决定,sessionID默认其生存周期直到浏览器关闭,它也可以通过php.ini中的设置session.cookie_lifetime 来控制,二者共同来决定session 的生存时间,二者中的其中任意一个失效了,就会造成session失效,要根据自己的需求来决定是要从哪方面来修改其生存时间。Session数据默认是session.gc_maxlifetime=1440s(默认是24分钟),可以用:
ini_set(‘session.gc._maxlifetime’,86400);//设置session数据的有效时间。
session_set_cookie_params(time()+86400);//设置的是sessionID有效时间。
或是用setcookie(session_name(),session_id(),time()+86400,’/’)来设置sessionID有效时间
参考1:浏览器不关闭,并将php.ini中的session.gc_maxlifetime设置为9999重启apache
cookie机制和session机制的区别
具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。
同时我们也看到,由于在服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择。
session与cookie最大的区别是:
Session采用键值对 , 也就是说ID存放客户端 , 而值放在服务器端 , 是通过用户的ID去找服务器上对应的值 , 这种方式值放置在服务器端 ,有个时间限制 ,时间到则服务器自动释放.
cookie
Cookies则有两种方法 , 一种方法是把值保存在浏览器的变量中 , 当浏览器关闭时结束 , 另一种方法是保存在硬盘中 , 只要时间不过期 , 下次还可使用.
一,session是将session信息保存在服务器上,并通过一个session ID来传递客户端的信息,同时服务器接收到session ID 后,根据这个ID来提供相关的sesion信息资源
二,cookie是将所有的信息以文本的形式保存在客户端,并由浏览器进行管理和维护
三,由于session为服务器存储,所有远程用户无法修改session文件的内容,而cookie
为客户端存储,所有session要比cookie安全的多,当然还有很多优点,如控制容易,可以按照客户自定义存储等(存储于数据库)...
cookie 和session 的区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、所以建议:
将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中
会话cookie和持久cookie的区别
如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。
如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。
存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式。
cookie与session之间的区别与联系
相同点:都可以在解决HTTP无状态的问题,使同一个客户端在访问网站的多次请求中,可以保存,设置信息,并且在请求事物之间建立联系。
不同点:简单的说cookie的信息保存在客户端,session的信息保存在服务器端。
Session采用键值对,也就是说ID存放客户端,而值放在服务器端,是通过用户的ID去找服务器上对应的值,这种方式值放置在服务器端,有个时间限制,时间到则服务器自动回收/释放。
Cookies则有两种方法,一种方法是把值保存在浏览器的变量中,当浏览器关闭时结束,另一种方法是保存在硬盘中,只要时间不过期,下次还可使用。
联系:当客户端使用基于Cookie方式保存的SessionID时,SessionID一般保存在cookie中。
备注:cookie在相同内核的浏览器之间是共享的,不同内核浏览器是不共享的例如火狐和IE(存放位置都不同,当然不共享)。不同内核浏览器不能共享cookie,也会产生不同sessionid。
拓展:http://www.jb51.net/article/55703.htm
http://www.cnblogs.com/acpp/archive/2011/06/10/2077592.html
相关文章推荐
- 学习vi和vim编辑(3):一个简单的文本编辑器(2)
- VB中需要注意的地方
- 【转】C语言mem.h中的函数介绍
- 数学(1.费马定理 2.扩展欧几里德算法 3.莫比乌斯反演)
- codeforces 232D Fence
- 收藏站点列表
- 【Game】protobuf:windows下环境配置
- SDN和NFV的基础,Intel如何思考
- [网络流24题] 04 魔术球问题 (有向无环图最小路径覆盖, 最大流)
- android开发(8) 选项卡的切换
- android开发(9) 渐变动画演示(Tween Animation)
- android开发(10) 逐帧动画演示(Frame Animation)
- android开发(11) 消息栏通知(Notification)
- winfrom - 重定向控制台的输入输出
- 和飞秋的通讯实现
- .net 命名管道(NamedPipe) 的使用
- android:gravity 和 android:layout_Gravity
- vs2015
- c#语法糖代码——自动属性, 匿名类型,对象与集合初始化器,扩展方法
- java工具类(六)根据经纬度计算距离