JavaWeb-Cookie+Session

举报
AAAI 发表于 2021/05/18 00:23:39 2021/05/18
【摘要】 Cookie+Session cookie是监视器,session是会话 存储位置不同: cookie是保存在客户端(浏览器), session是保存服务器端 2. 存储数据量大小不同: cookie存储是有限的, 不超过4KB, seesion是无限制的; Cookie就是饼干!很好理解的,就是你第一次访问我我会拦截你,然后我给你分一块饼干,当你有了这个饼干就相...

Cookie+Session

cookie是监视器,session是会话

  1. 存储位置不同: cookie是保存在客户端(浏览器), session是保存服务器端 2. 存储数据量大小不同: cookie存储是有限的, 不超过4KB, seesion是无限制的;

Cookie就是饼干!很好理解的,就是你第一次访问我我会拦截你,然后我给你分一块饼干,当你有了这个饼干就相当于有了一个令牌,以后访问不会拦截你。

会话

会话:用户打卡一个浏览器,点击很多超链接,访问跟web资源,关闭浏览器

服务点给客户端一个cookie,下次访问带上cookie

服务器等级来过了,之后直接进行匹配。

有状态会话:下次访问,知道之前访问过。

保存会话的技术

cookie是保存在客户端(响应,请求),只能存储String,没有object

session是保存服务器端(保存会话信息),将数据或者信息放在Session中。(网站记录用户信息,下次不用登录就可以访问信息)

demo是演示,domain是域,daemon才是守护

Cookie

  • 从请求中拿到cookie的信息
  • 服务器响应给客户端cookie
  • cookie.getName() 获取cookie的key
  • 一般保存在本地用户目录的appdata下
  • 一个web站点可以存放最多20个cookie,cookie大小为4kb,300个cookie浏览器上限。
  • 不设置有效期,关闭浏览器,cookie自动失效; 或者设置cookie有效期时间为 0

实例:客户端上一次访问时间

req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setHeader("Content-type","text/html;charset=utf-8"); // 乱码就设置一下
PrintWrite = resp.getWrite();
// Cookie 服务器端从从客户端获取
Cookie[] cookies = req.getCookies();
// 判断Cookie是否为空
if (cookies!=null){ out.write("xxx"); for (int i = 0; i < cookies.length; i++){ Cookie cookie = cookies[i]; if ("lastLoginTime".equels(cookie.getName())){//用name.equals能避免空指针异常 // 获取cookie中的值 long l = Long.parseLong(cookie.getValue();) Dare date = new Date(l); out.write(date.toLocaleString()); } } }else{ out.write("xxx");
}
// 服务器给客户端响应一个cookie
Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + "");
// cookie是一个类,因此cookie的getName方法就是存放在cookie中数据的key

cookie.setMaxAge(24*60*60) // cookie有效期为1天

resp.addCookies(cookie);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

中文乱码:

// 编码
URLEncoder.encode("你","UTF-8"));
// 解码
URLDecoder.decode(cookie.getValue(),"UTF-8"));

  
 
  • 1
  • 2
  • 3
  • 4

Session重点

服务器给每一个用户(服务器)创建一个Session对象,session就是存储在服务器,Session把用户的数据写到用户独占Session中,服务器端保存 (保存重要的信息,减少服务器资源的浪费)

一个Session独占一个浏览器,用户先访问服务器,服务器给用户返回一个sessionId,通过cookie传递。

用户登录之后,整个网站都可以访问,保存用户信息

// 得到Session
HttpSession session = req.getSession();
// session存对象,东西
session.setAttribute("name", "xx");
session.setAttribute("object", new Person("xx", 1);
// 获取sessionID
String sessionid = session.getId();
// 判断Session是不是新创建
if (session.isNew()){ resp.getWriter().write("ID:"+ sessionid);
}else{ resp.getWriter().write("ID已经存在:"+ sessionid); //session之所以存在了,是因为tomcat启动的时候自动访问了该站点,所以就已经存在了,session其实是浏览器访问此服务器任何一个页面的时候都自动创建的,所以你访问了其他页面后,在访问session页会发现已存在
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
HttpSession session = req.getSession();
String name = session.getAttribute("name");
Person person = session.getAttribute("object");
session.removeAttribute("name");
// 手动注销session
session.invalidate();

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
<session-config> <!--会话自动过期,以分钟为单位--> <session-timeout>15</session-timeout>
</session-config>

  
 
  • 1
  • 2
  • 3
  • 4

文章来源: blog.csdn.net,作者:αβγθ,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_38022166/article/details/116921580

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。