Session与Cookie

无状态管理

例: Http协议就是一个无状态的协议

HTTP协议本身是无状态的,这与HTTP协议本来的目的是相符的,客户端只需要简单的向服务器请求下载某些文件,无论是客户端还是服务器都没有必要纪录彼此过去的行为,每一次请求之间都是独立的,就会在每一次创建一个新的;

说白了就是用户每一次在操作浏览器的时候的状态(一般普通的请求都是分为三步):

1、客户端发送请求给服务器
2、服务器处理该请求
3、服务器将处理结果响应该客户端。

一旦这基本的过程走完,之后该客户端再次向该服务区发送请求后,但是服务器端并不能知道这两个请求是否是同一个浏览器(用户)发出来的;
就当你用你的电脑使用浏览器访问了某个网站,并且登录了你的账号或者密码,当你关闭服务器的时候,那么你的登录状态也跟着退出,如果你每天都需要访问这个网站,那就会导致你每一次都需要进行登录操作,因为上面也说了;
所以我们要想的就是怎么样可以保持或记录该用户的状态(或是信息)

我们可以使用SessionCookie保持来保持这种
(往下看Session,Cookie)

来个不怎么标准的状态管理解释:
状态管理就是,将客户端和服务器的多次交互当作一个整体,
将多次交互所涉及的数据状态保存下来。

解决方式:
1、保存在cookie中
2、保存在session中
3、保存在本地存储当中
4、其他方式,使用第三方状态管理框架,如:Vuex

Session

***陈述:***
同一个客户端与服务器端的在一段时间内的多次交互(可以理解为访问数据),我们就可以称该客户端为该服务器端的一个客户端会话窗口,有了会话窗口,我们就能确定哪个请求是哪个用户发出的了,从而可以实现会话跟踪,并记录用户的行为。

会话原理:
说简单一点就是你打开一个浏览器,这就是开启了一个会话,访问该web服务器的多个资源,然后关闭浏览器,这中间的一系列过程称之为一个会话。
再说简单一些就是你在当前页面使用session保存了数据,那么你可以在同一个网站,不同的页面访问这些你在session保存好的数据

Session与cookie功能效果相同。
Session与Cookie的区别在于Session是记录在服务端的,而Cookie是记录在客户端的。

创建session对象

protected void CreateOrGetSession (HttpServletRequest req, HttpServletResponse resp) throws 	ServletException, IOException {
    //创建或获取Session会话对象
    HttpSession session = req.getSession();
    //判断当前Session会话是否是新创建出来的
    boolean isNew = session.isNew();
    //获取Session会话的唯一标识 id
    String id = session.getId();

JSP内置对象session

在这里插入图片描述

protected void CreateOrGetSession (HttpServletRequest req, HttpServletResponse resp) throws 	ServletException, IOException {
			// session添加数据的方法
			session.setAttribute("uname", uname);
			session.setAttribute("upwd", upwd);
			
			// session通过key获取对象值
			session.getAttribute("uname"); // 参数填写要获取的键
			session.getAttribute("upwd");
			
			// 设置session的有限时间
			// 值为正数的时候,设定 Session 的超时时长
			session.getMaxInactiveInterval("60*60*24*2"); // 单位(秒)
			
			//负数表示永不超时(极少使用,因为如果不销毁就会一直占用内存空间)
			session.getMaxInactiveInterval(-1);
			
			// 获取session的有限时间
			session.getMaxInactiveInterval("60*60*24*3"); 
			
			// 获取session的对象编号
			session.getId();
			
			// 设置session对象失效
			session.invalidate(); // 让当前 Session 会话马上超时无效
}

Cookie

Cookie是Web服务器保存在客户端的一系列文本信息

Cookie的作用
对特定对象的追踪
统计网页浏览次数
简化登录

安全性能:
容易信息泄露

会话 Cookie 有个特征,客户端关闭时 Cookie 会删除,因为它没有指定ExpiresMax-Age 指令。但是,Web 浏览器可能会使用会话还原,这会使大多数会话 Cookie 保持永久状态,就像从未关闭过浏览器一样。

在这里插入图片描述

protected void CreateOrGetCookie (HttpServletRequest req, HttpServletResponse resp) throws 	ServletException, IOException {
 	String username=reqeust.getParameter("username");
	//以key/value的形式创建Cookie
	Cookie uname=new Cookie("uname", username);
	//将Cookie对象保存在客户端 
	req.addCookie(uname);
	
	// 设置Cookie的有限时间,以秒为单位
	uname.getMaxAge("60*60*24*2");
	
	// 获取Cookie的有限时间,以秒为单位
	uname.getMaxAge();
}
	<%//获取请求中的Cookie,以数组方式保存
       Cookie cookies[]=request.getCookies();
       //循环遍历数组,得到key=uname的Cookie
      for(int i=0;i<cookies.length;i++){
              Cookie ucookie=cookies[i];
              if(ucookie.getName().equals("uname”));//判断Cookie的名称
	 %>
    欢迎你:<%=ucookie.getValue() %>//获取key对应的value,输出显示
    <%  }  %>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值