cookie session
概念
Cookie是保存在客户端的纯文本文件
传输
服务器------浏览器
通过服务器 创建产生,由服务器的响应http响应头里放置,然后传给浏览器,然后通过浏览器给本地保存一个cookie
浏览器------服务器
参数
1、Name cookie的名字。同域名下,cookie的名字是唯一的,相同的name的值会被覆盖掉
2、Value 表示cookie的值。需要注意的是,cookie的Name属性和Value属性都不允许有逗号,分号,空格的存在,因此如果有着三种形式的符号存在的话,需要将其进行编码。
3、Domain cookie所在的域名。如果没有设置domain的话,那么会cookie会自动绑定到执行语句的当前域。并且cookie不能够在一个域名和该域名下的二级域名之间公用。
4、Path 默认值是/,匹配的是路由,比如你的域名是www.csdn.net,那么路由如果是www.csdn.net/console/,那么实际上cookie绑定的是这个/console
5、Max-age cookie的有效期。正数表示cookie在多少秒之后会失效;负数表示临时储存,只存在于浏览器内存,一旦浏览器关闭,cookie就会消失;当Max-Age为0时,删除cookie。
6、Secure 确保cookie是在https等安全协议下进行传输的,但是不会将客户端的cookie加密
7、HttpOnly 设置为true表示不能够被js脚本访问。使用HttpOnly能够阻止js通过document.cookie来获取cookie,在一定程度上防止跨站脚本攻击(xss)。
Session
原理
服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机,这样,只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号去,服务器发现客户机浏览器带session id过来了,就会使用内存中与之对应的session为之服务。
Session常用方法
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的超时时间。单位为秒
boolean isNew()返回该Session是否是新创建的
void invalidate()使该Session失效
Session对象的销毁
Session对象默认30分钟没有使用,则服务器会自动销毁Session,在web.xml文件中可以手工配置Session的失效时间。
当需要在程序中手动设置Session失效时,可以手工调用session.invalidate()方法,摧毁session.
Session和Cookie的主要区别:
1.Cookie是把用户的数据写给用户的浏览器。
2.Session技术把用户的数据写到用户独占的session中。
3.Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。
4.cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。
5.设置cookie时间可以使cookie过期。但是使用session-destory(),我们将会销毁会话。
浏览器禁用cookie解决追踪
解决方法1
使用URL重写,给浏览器的URL中添加jsessionid参数,使用这个jsessionid可以找到对应的Session从而达到追踪的效果
步骤
1.获取Session,如果没有cookie的返回的jsessionid对应的session,那么就创建一个session
2.确定URL重写的路径
3.使用响应的 encodeRedirectURL或者encodeURL来进行URL重写
4.重定向到指定的服务上,session就可以进行追踪了

浙公网安备 33010602011771号