javaEE-session与Cookie

news/2024/5/18 15:27:50 标签: cookie, java, session

为什么要有会话?

服务端同时接收大量的客户端请求,如何来区分哪些请求来自于同一个会话?能识别出来自同一个客户端的访问请求,这就需要客户端对其发出的每个请求进行标识,属于同一个会话中的请求都有相同的标识号,这就是 sessionID。

让服务端通过获取Cookie里的JSESSIONID,来区分不同的客户端。防止出现数据错乱,例如:张三的商品不能加到李四的购物车里面。

session_7">session

setAttribute

getAttribute

removeAttribute

invalidate //设置 session 失效,当用户执行退出登录时,调用该方法

session 常用方法:

  • String getId() //获取sessionID

  • void setMaxInactiveInterval(int interval) //设置 session 失效时间,单位是秒

  • int getMacInactiveInterval() //获取 session 时间

  • void setAttribute(String key,Object value) //在 session 中以键值对的形式存储数据

  • Object getAttribute(String key) //通过 key 值获取 session 中保存的数据

  • void removeAttribute(String key) //通过 key 值移除 session 中保存的数据

      实际开发中,普通的业务数据传递一般选择 request,需要结合转发完成资源的跳转。登录成功之后的用户信息,一般选择 session的ConcurrentHashMap<K, V>集合属性,无论是转发还是重定向,没有区别,都可以从 session 中取出数据。
    

java">
 	<%
        //多个页面访问session.jsp,    sessionId相同。不同浏览器,sessionId不相同。
        String sessionId = session.getId();
        int timeout = session.getMaxInactiveInterval(); //默认1800秒。
        session.setMaxInactiveInterval(1000);
        timeout = session.getMaxInactiveInterval();

    %>
    <%=timeout%>       <!--1000-->
    

面试题:浏览器关闭,session就销毁了?     NO!

  • 我们知道Session是存在于服务器端的,当把浏览器关闭时,浏览器并没有向服务器发送任何请求来关闭Session,自然Session也不会被销毁,但是可以做一点努力,在所有的客户端页面里使用js的window.onclose来监视浏览器的关闭动作,然后向服务器发送一个请求来关闭





Cookie

安全性不好,因为他是由Server端产生,存在于浏览器中,在浏览器安装目录Cookie文件下可见。
session是存在于Server端的。

  • void setMaxAge(int age) 设置 Cookie 的有效期,以秒为单位

  • int getMaxAge() 获取 Cookie 的有效期,默认-1 表示一直存在。

  • void setValue(String value) 修改 Cookie 的 value 值

  • String getName() 获取 Cookie 的 name 值

  • String getValue() 获取 Cookie 的 value 值

cookie.jsp:

java">
		Cookie cookie = new Cookie("name","zhangsan");
        response.addCookie(cookie);
        session.setAttribute("cookie",cookie);
        //重定向方式,看到的效果明显。
        response.sendRedirect("index.jsp");
        

注意:Cookie中不能存中文。

index.jsp:

java">
		  Cookie cookie = (Cookie) session.getAttribute("cookie");
          cookie.setValue("lisi");
          response.addCookie(cookie);
          out.write(cookie.getName()+"="+cookie.getValue());//	name=lisi
              




Session 和 Cookie 的区别

Session 和 Cookie 的联系是通过JSESSIONID,用火狐测。

Session 保存在服务端,Cookie 保存在客户端。

Session 存储的数据类型 Object,Cookie 只能存储 String

Session 会随着会话的结束而销毁,Cookie 可长期保存在客户端浏览器中

Session 保存重要信息,Cookie 保存不重要的信息


http://www.niftyadmin.cn/n/1847320.html

相关文章

[100天挑战100个前端效果]第十四天---旋转的炫彩小球(制作彩色计时器0.0)

旋转的炫彩小球让我们先来看看实现的效果吧html代码css代码知识汇总和思路分析让我们先来看看实现的效果吧 html代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible&qu…

杭电2019多校第四场 HDU-6621 K-th Closest Distance(主席树+二分)

链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid6621 题意&#xff1a;T组样例&#xff08;T<3&#xff09;。每组样例第一行给出n、q。接下来给出n个数。在接下来q个询问&#xff0c;每个询问给出l、r、p、k&#xff0c;但都要异或上一次的答案&#xff0c;才…

javaEE-Tomcat

01Web 应用服务器: Tomcat、Jboss、webloic、JettyJ2EE 01Tomcat bin&#xff1a;存放各种平台下启动和停止 Tomcat 服务的脚本文件 conf&#xff1a;存放 Tomcat 服务器配置文件 lib&#xff1a;存放运行Tomcat 服务需要的 jar 文件 logs&#xff1a;存放 Tomcat 运行的…

[我与八皇后的恩恩怨怨]满足行条件的全排列,然后一一检测是否满足八皇后即可(全排列解法)

我与八皇后的恩恩怨怨什么是八皇后八皇后的解法很多今天&#xff0c;我们只用全排列什么是八皇后 八皇后问题是一个古老而著名的问题&#xff0c;是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出&#xff1a;在8X8格的国际象棋上摆放八个皇后&#xff0c;使…

centos 7.6 配置zabbix 支持华为交换机snmp功能

yum install -y net-snmp net-snmp-utilssnmpwalk -v 2c -c test123 10.192.192.1

华为交换机配置snmp

查看snmp版本display snmp-agent sys-info version设置snmp-agent配置版本 snmp-agent sys-info version v2csnmp-agent sys-info version v3snmp-agentsnmp-agent community read public /设置读团体名:public/snmp-agent community write private …

[JavaScript学习笔记]数组的那些儿事儿(都是细节,我已收藏!)

数组的那些儿事儿&#xff01;数组的概念创建数组数组的创建方式(两种)利用new创建数组利用数组字面量创建数组数组的元素类型获取数组种的元素数组的索引遍历数组数组的长度求数组的和与平均值求数组中的最大值数组转换为字符串数组中新增元素通过修改length长度新增数组元素通…

杭电2019多校第四场 HDU-6616 Divide the Stones (构造+思维)

链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid6616 题意&#xff1a;T组样例&#xff0c;每组样例给出n和k&#xff08;保证k是n的因子&#xff09;。有n堆石子&#xff0c;第i堆有i个石子。问能否把这n堆石子分成k组&#xff0c;并且每组的石子和相等。&#…