session和cookie的简单用法

5 篇文章 0 订阅
4 篇文章 0 订阅

session和cookie都是能够保存顾客状态的技术,不过还是略有不同的。
Session :(服务器端)
• 适合保存大量的数据。
• 安全。
• 效率高
• Session跟踪机制中需要cookie来保存和传递sessionId

Cookie:(客户端)
• 不适合保存大量的数据。
• 不安全。
• 效率低


session将http状态信息保存在服务器端的技术
获取session的方法:

HttpSession session = request.getSession();

因为session是同时也是作用域,故有getAttribute、setAttribute、removeAttribute方法:

session.getAttribute("name");获取一个属性
session.setAttribute(“name”,"value");设置一个属性
session.removeAttribute("name");删除一个属性

当浏览器请求服务器时,如果session已经被创建,则返回已经创建的。如果未创建,则创建新的session。一个客户端拥有一个session对象

session的一些常用方法:

session.getId();// 返回相关联的session的id。
session.setMaxInactiveInterval(60*30);

以秒为单位设置session的最大空闲时间(也可以在tomcat中的web.xml中中配置空闲时间)。

session.invalidate();// 强制session失效。和session.setMaxInactiveInterval(0)一样

有时候会发现设置session立马失效,当页面再次访问浏览器时,再次调用session.getId方法并输出结果,发现此时的session地址和之前的session地址是一样的。这是因为浏览器cookie里面存在一个sessionID信息,每次访问服务器时都把这个传递过去,之前session已经被销毁,则服务器会创建一个新的session对象,指向之前的地址。这就是为什么明明session已经销毁了,再次访问还存在的原因,后来的那个session对象已经不是之前的那个session对象了。

不然你还可以测试一下,在之前的session对象中存放一些数据进作用域,再把它销毁,等页面再次访问时,才去取之前存放在作用域中的数据,你会发现那些数据已经随着之前那个session对象销毁而消失了。

cookie将http状态信息保存在客户端的技术.
不是服务器直接读取本地的cookie,而是浏览器读cookie,而服务器读浏览器发出的名为cookie的请求头信息。(通过httpwatcher观察名为cookie的头信息)
创建cookie对象:

Cookie cookie = new Cookie(“uname”,“uname”);

cookie的一些常用方法:

 cookie.setMaxAge(3600*24) ;//设置cookie的有效期. 如果不设置有效时间cookie就不会被增加到客户端硬盘上,只是写到客户端内存中(关闭浏览器或者断电就会丢失信息)。

setValue();设置cookie的value值;
getName();获取cookie的name属性
getValue();获取cookie的value属性

 response.addCookie(cookie);// 响应信息中添加cookie
request.getCookies() ; //取得客户端发来的所有cookie对象

getCookies()方法返回Cookie[]类型的数组,再用getName() getValue()来访问它的Name和Value 读取的不是客户端硬盘或内存中的信息。而是浏览器发送给服务器的请求头Cookie中的信息。

for (Cookie cookie : cookies) {
            System.out.println(cookie.getName()+"---"+cookie.getValue());
        }

session机制:
session是以cookie或URL重写为基础来实现的,默认使用cookie来实现;

cookie方法来实现session机制:
Servlet规范规定实现session的cookie名称强制为jsessionid,在浏览器第一次请求的时候,服务器产生一个唯一的id,并把这个id设置给一个名叫jsessionid的cookie,然后再通过response的addcookie输出到浏览器端;

URL重写来实现session机制:
服务器的servlet在生成HTML页面的时候需要用到response.encodeURL方法来编码URL,该方法就是用来实现URL重写功能的,这是因为浏览器可能是因为取消cookie功能,而未提供cookie,服务器为了确保下次提交成功,必须确保生成给浏览器端的url带有jsessionid。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值