栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Cookie和session

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Cookie和session

1.会话&cookie机制
1.1:会话(Session)

会话(Session)跟踪是Web程序里我们常用的技术,作用是用来跟踪用户的整个会话。而我们常用的会话跟踪技术是cookie与Session。cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。

1.2:cookie机制

常理而言,一个用户的所有请求操作本应都该属于同一个会话,另一个用户的所有请求操作应该属于另一个会话,但Web程序是使用HTTP协议(无状态协议)来传输数据的,两者数据一旦交换完成,客户端和服务端将会断开连接,再次交换数据则需建立新的连接,因此服务器无法从连接上跟踪会话。

例:张三在超市拿了一瓶牛奶放入至购物车中,然后又拿了一个面包,这时服务器将无法判断后拿的面包是属于张三的会话还是李四的会话。


2.什么是cookie?

cookie原意为“甜饼”,但实则并不是该意思,而是保存在客户机中的一段不超过4KB的“小型文本文件(可理解为给客户端颁发的通行证,通过该证即可确认客户的身份)”,是某些网站为了辨别用户身份,进行 Session 跟踪而储存在用户本地机上的数据,由客户端计算机暂时或永久保存的信息。由W3C组织提出,保存在客户端浏览器中。

2.1:cookie的所有属性
属性名描述
String name名称:一旦创建,便不可更改。
Object value值:若值为Unicode字符,则需要为字符编码;若值为二进制数据,则需要使用base64编码。
int maxAge失效的时间(单位秒):如果是正数,则该cookie在maxAge秒之后失效。如果为负数,该cookie为临时cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该cookie。如果为0,表示删除该cookie。默认为–1
boolean secure该cookie是否仅被使用安全协议传输:安全协议有HTTPS,SSL等,在网络上传输数据之前先将数据加密。默认为false
String path使用路径:如果设置为“/sessionWeb/”,则只有contextPath为“/sessionWeb”的程序可以访问该cookie。如果设置为“/”,则本域名下contextPath都可以访问该cookie。注意最后一个字符必须为“/”
String domain可访问该cookie域名:如果设置为“.google.com”,则所有以“google.com”结尾的域名都可以访问该cookie。注意第一个字符必须为“.”
String commentcookie的用处说明:浏览器显示cookie信息的时候显示该说明
int versioncookie使用的版本号:0表示遵循Netscape的cookie规范,1表示遵循W3C的RFC 2109规范
2.2:cookie有效期

如果maxAge属性为正数,那么cookie将会在maxAge秒后自动失效,只要还在maxAge前,无论用户关闭浏览器还是关机登录网站时的cookie依旧有效。

如果maxAge为负数,则不会被持久化,cookie信息保存在浏览器内存中,这时若是关闭浏览器该cookie将会消失,cookie默认的maxAge值为–1。

​cookie cookie = new cookie("name","value");   // 新建cookie
 
//maxAge属性为正数,以下代码将永久有效
cookie.setMaxAge(Integer.MAX_VALUE); // 设置生命周期为MAX_VALUE
 
//maxAge为负数
cookie.setMaxAge(0);                          // 设置生命周期为0,则表示删除该cookie,不能为负数
 
cookie.setDomain(".helloweenvsfei.com");           // 设置域名
cookie.setPath("/session/");                          // 设置路径
cookie.setSecure(true);                           // 设置安全属性
 
response.addcookie(cookie);                    // 必须执行这一句(输出到客户端)


3.什么是Session?

Session是另一种记录客户状态的机制,即用户浏览器访问服务器时,服务器把用户的信息以某种形式保存在服务器上,且增加了服务器的存储压力。Session机制决定了当前客户只会获取到自己的Session,

3.1:Session的常用方法
方  法  名描    述
void setAttribute(String attribute, Object value)设置Session属性。value参数可以为任何Java Object。通常为Java Bean。value信息不宜过大
String getAttribute(String attribute)返回Session属性
Enumeration getAttributeNames()返回Session中存在的属性名
void removeAttribute(String attribute)移除Session属性
String getId()返回Session的ID。该ID由服务器自动创建,不会重复
long getCreationTime()返回Session的创建日期。返回类型为long,常被转化为Date类型,例如:Date createTime = new Date(session.get CreationTime())
long getLastAccessedTime()返回Session的最后活跃时间。返回类型为long
int getMaxInactiveInterval()返回Session的超时时间。单位为秒。超过该时间没有访问,服务器认为该Session失效
void setMaxInactiveInterval(int second)设置Session的超时时间。单位为秒
void putValue(String attribute, Object value)不推荐的方法。已经被setAttribute(String attribute, Object Value)替代
Object getValue(String attribute)不被推荐的方法。已经被getAttribute(String attr)替代
boolean isNew()返回该Session是否是新创建的
void invalidate()使该Session失效
3.2:设置Session的有效时间

因访问服务器的用户越来越多,然而Session也会随之增多,为了防止内存溢出,服务器会把长时间(Session超时时间,若超时没访问该服务器,Session将自动失效)不活跃的Session从内存中移除。

Tomcat中Session的默认超时时间为20分钟,通过setMaxInactiveInterval(int seconds)修改超时时间,也可修改web.xml改变Session的默认超时时间

//设置Session超时时间

   60      


4.cookie和session的区别?

cookie数据存放在客户的浏览器上,Session数据放在服务器上.cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用Session。设置cookie时间可以使cookie过期。但是使用session-destory(),我们将会销毁会话。Session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用cookie。单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。(Session对象没有对存储的数据量的限制,其中可以保存更为复杂的数据类型)一个是IE启动到IE关闭.(浏览器页面一关 ,Session就消失了),一个是预先设置的生存周期,或永久的保存于本地的文件。(cookie) 注:

       Session很容易失效,用户体验很差;

      虽然cookie不安全,但可以加密 ;

      cookie也分为永久和暂时存在的;

      浏览器有禁止cookie功能 ,但一般用户都不会设置;

      一定要设置失效时间,要不然浏览器关闭就消失了;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/750873.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号