session和cookie

cookie和session

  • Cookie : 客户端行为, 数据保存在客户端(cookie对象在服务器创建)

  • Cookie的提交:

    • cookie可以通过设置名称,路径,以及域名保证是否提交cookie到指定的网站
  • session: 服务端行为,数据保存在服务端(session对象在服务端)

    • 保存哪些数据: 保存私有数据(个人用户数据)

Session的活化和钝化

Session机制很好的解决了Cookie的不足,但是当访问应用的用户很多时,服务器上就 会创建非常多的Session对象,如果不对这些Session对象进行处理,那么在Session失效之前,这些Session一直都会在服务器的内存中存在。那么就,就出现了Session活化和钝化的机制。

1)Session钝化:
session 在一段时间内没有被使用时,回将当前存在的session对象序列化到磁盘上,从而不在占用空间。
若希望session域和包含的其他对象中的对象也能一起序列化到磁盘是,必须实现java.io.Serializable接口
2)Session活化:
session在被钝化以后,服务器再次调用到session对象时,将session对象有磁盘中加载到内存中使用。

案例分析

  1. 保存用户的浏览记录功能, 浏览记录数据在哪里保存?

  2. 验证码的功能, 验证码数据在哪里保存?
    在这里插入图片描述
    sessionid是一个随机数
    cookie名称相同会覆盖

在这里插入图片描述

实现

1.配置tomcat服务器
2.创建jsp模块在这里插入图片描述
3.添加依赖
在这里插入图片描述
默认配置样式
在这里插入图片描述
4.jsp代码

<html>
<head>
<h1>哥,${username},您吃好了,慢走!! ! </h1>
</head>
<body>

5.业务代码

pubLic cLass Helloservlet extenas HttpservLet {
	private String message;
	public void init() { message = "Hello World ! "; }
	public void doGet(HttpServletRequest request,HttpServletResponse response) throw 
	//1.创Lsession对象,保存用户信息
	HttpSession session = request.getsession();
	//2.获取用户信息
	session.setAttribute( s: "username",request.getParameter( s: " name"));
	//3.把用户信.悬显示到页面
	response.sendRedirect( s: request.getcontextPath()+" /index.jsp");
	//2.操作都是web服务端自动完成
//1=获取session的id2=把id存到cookie里面3=把cookie响应到浏览器端
}
public void destroy() {}

6.访问路径
在这里插入图片描述
7.结果
在这里插入图片描述

实现会话跟踪的技术有哪些

  1. 使用Cookie**

向客户端发送Cookie

Cookie c =new Cookie("name","value"); //创建Cookie 
c.setMaxAge(60*60*24); //设置最大时效,此处设置的最大时效为一天
response.addCookie(c); //把Cookie放入到HTTP响应中

从客户端读取Cookie

String name ="name"; 
Cookie[]cookies =request.getCookies(); 
if(cookies !=null){ 
   for(int i= 0;i<cookies.length;i++){ 
    Cookie cookie =cookies[i]; 
    if(name.equals(cookis.getName())) 
    //something is here. 
    //you can get the value 
    cookie.getValue(); 
       
   }
 }

优点: 数据可以持久保存,不需要服务器资源,简单,基于文本的Key-Value

缺点: 大小受到限制,用户可以禁用Cookie功能,由于保存在本地,有一定的安全风险。

  1. URL 重写

在URL中添加用户会话的信息作为请求的参数,或者将唯一的会话ID添加到URL结尾以标识一个会话。

优点: 在Cookie被禁用的时候依然可以使用

缺点: 必须对网站的URL进行编码,所有页面必须动态生成,不能用预先记录下来的URL进行访问。

3.隐藏的表单域

<input type="hidden" name ="session" value="..."/>

优点: Cookie被禁时可以使用

缺点: 所有页面必须是表单提交之后的结果。
4. HttpSession

在所有会话跟踪技术中,HttpSession对象是最强大也是功能最多的。当一个用户第一次访问某个网站时会自动创建 HttpSession,每个用户可以访问他自己的HttpSession。可以通过HttpServletRequest对象的getSession方 法获得HttpSession,通过HttpSession的setAttribute方法可以将一个值放在HttpSession中,通过调用 HttpSession对象的getAttribute方法,同时传入属性名就可以获取保存在HttpSession中的对象。与上面三种方式不同的 是,HttpSession放在服务器的内存中,因此不要将过大的对象放在里面,即使目前的Servlet容器可以在内存将满时将HttpSession 中的对象移到其他存储设备中,但是这样势必影响性能。添加到HttpSession中的值可以是任意Java对象,这个对象最好实现了 Serializable接口,这样Servlet容器在必要的时候可以将其序列化到文件中,否则在序列化时就会出现异常。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值