cookie,session(cookie,session连用),requestAPI,filter,注解

本文深入解析了Session与Cookie的工作原理,对比了它们在安全性、存储位置、容量限制及服务器性能影响方面的区别。详细介绍了如何在Java Web应用中使用Session与Cookie进行用户认证和会话跟踪。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

session、cookie

其他组件:

浏览器(pc网站):

萌工具箱不关心你是谁,计算器不需要知道那你自己,huxiu,好奇

Cookie:

再次访问某一网站时,能令网站识别访问人的计算机软件。

Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息。

每次HTTP请求时,客户端都会发送相应的Cookie信息到服务端。它的过期时间可以任意设置,如果你不主动清除它,在很长一段时间里面都可以保留着,即便这之间你把电脑关机了。

  • cookie
    • 概念:保存在客户端的一段小文本,会随着请求发回给服务器
    • API
      • new Cookie(name,value)
      • setMaxAge(int age) => -1 表示浏览器关闭时销毁Cookie
      • response.addCookie©;
      • Cookie[] cookies = request.getCookies();

case ???:
if (autologin != null && autologin.equals("true")) {
					Cookie namecookie = new Cookie("username", user.getUsername());
					Cookie pwdcookie = new Cookie("passwd", user.getPwd());
    //username和passwor都保存在cookie上
					namecookie.setMaxAge(ONE_DAY);
					pwdcookie.setMaxAge(ONE_DAY);
  //设置cookie的存活时间
					response.addCookie(namecookie);
					response.addCookie(pwdcookie);
  //将cookie保存在浏览器上
  //cookie一系列的操作
				}               
<!--解释jsp,这个注释会被保留,
cookie页面上的直接跳转,如果cookie有值,那么直接跳转到登录页面
-->
<%
		Cookie[] cookies = request.getCookies();
		String username = null;
		String passwd = null;
		
		if(cookies!=null&&cookies.length>2){
			System.out.println("cookie有三个以上");
		for (Cookie c : cookies)

		{//取的cookie
			//System.out.println("cookie" + c.getValue());
			if (c.getName().equals("username"))
				username = c.getValue();
			if (c.getName().equals("passwd"))
				passwd = c.getValue();
			System.out.println("username" + username + "    " + passwd+"index.jsp/66行");
		}
//input标签的name
		if (username != null && passwd != null && username != "" && passwd != "") {
			request.setAttribute("username", username);
			request.setAttribute("password", passwd);
			request.getRequestDispatcher("/login").forward(request, response);
			return;
		}}
	%>
  • form中增加autologin标识
  • 登录成功,添加cookie
  • index.jsp 获取cookie,验证是否存在,存在则转发给LoginServlet
  • LoginServlet增加从Attribute中获取数据的方法

Session

会话跟踪:告诉服务器我是谁,使用session

Session是在无状态的HTTP协议下,***服务端***记录用户状态时用于标识具体用户的机制。

可以保存在文件、数据库或者集群中。在***浏览器关闭***后这次的Session就消失了,

其实并不是Session消失了,而是Session ID变了,只是他们是无主状态,也许一段时间后会被删除.

实际上Cookie与Session都是会话的一种方式。

目前大多数的应用都是用 Cookie 实现Session跟踪的。

第一次创建Session时,服务端会通过在HTTP协议中反馈到客户端,需要在 Cookie 中记录一个Session ID,以便今后每次请求时都可分辨你是谁。

  • session的概念及实现原理
  • 获取session
  • 属性操作
  • 使session失效
//创建session,使用
HttpSession session = request.getSession();
				session.setAttribute("userinfo", user);
				request.getRequestDispatcher("hello.jsp").forward(request, response);
//使用
Object obj = session.getAttribute("userinfo");
if(user!=null){
  User user=(User)obj;
}
//或
<%-- 这种注释方式是不会被解释的
 <div style="">
  <c:if test="${sessionScope.userinfo.username!=null }">
	    <a href="logout">	欢迎:${sessionScope.userinfo.username}
		</a>
  </c:if>
 </div>
  
   简单点: ${userinfo.username}
  --%>

  • session
    • 概念:多次关联的请求组成了一次会话
    • 实现原理:
      • 第一次请求,开辟内存,生成sessionId, 生成一个名为JSESSIONID的cookie,保存sessionId到客户端
      • 后续请求将携带JSESSIONID的cookie给服务器,服务器据此定位到相应的内存空间
      • 当cookie失效或者服务器端session过期时,会话结束
    • API
      • HttpSession session = request.getSession()
      • setAttribute(k,v) / getAttribute(K) / removeAttribute(k)
      • invalidate 关闭session
      • setMaxinactiveInterval 设置最大失效时间

总结语:

1、Cookie 在客户端(浏览器),Session 在服务器端。

2、Cookie的安全性一般,他人可通过分析存放在本地的Cookie并进行Cookie欺骗。在安全性第一的前提下,选择Session更优。重要交互信息比如权限等就要放在Session中,一般的信息记录放Cookie就好了。

3、单个Cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个Cookie。

4、Session 可以放在 文件、数据库或内存中,比如在使用Node时将Session保存在redis中。由于一定时间内它是保存在服务器上的,当访问增多时,会较大地占用服务器的性能。考虑到减轻服务器性能方面,应当适时使用Cookie。

5、Session 的运行依赖Session ID,而 Session ID 是存在 Cookie 中的,也就是说,如果浏览器禁用了 Cookie,Session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 Session ID)。

6、用户验证这种场合一般会用 Session。因此,维持一个会话的核心就是客户端的唯一标识,即Session ID。

request的方法

  • getParameter /getParameterMaps
  • get/setAttribute
  • getSession 得到session
  • getServletContext 得到上下文
  • getContextPath 得到上下文路径
  • getRequestDispatcher 得到转发器
  • getRequestURI 请求路径 /emall/user
  • getRequestURL 请求地址: http://localhost:8080/emall/user
  • getRemoteAddr ip地址
  • getCookies

Filter:我一般用来解决字符编码的问题

  • 拦截指定的请求,并进行处理,适用于通用的功能,例如设置编码
  • 编写步骤
    • 新建Java类实现Filter接口
    • 实现3个方法(doFilter)
      • 调用filterChain.doFilter(request,response)
    • web.xml注册
      • filter
        • filter-class : 全路径
      • filter-mapping
        • url-pattern

题外话,那么话说Session Cookie能被篡改么?

理论上可以,只要改变了连接时的Session ID 就可以了~

什么是session什么是cookie:

他人博客:

https://www.cnblogs.com/yonyong/p/9337712.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值