JavaWeb-Cookie+Session
【摘要】 Cookie+Session
cookie是监视器,session是会话
存储位置不同: cookie是保存在客户端(浏览器), session是保存服务器端 2. 存储数据量大小不同: cookie存储是有限的, 不超过4KB, seesion是无限制的;
Cookie就是饼干!很好理解的,就是你第一次访问我我会拦截你,然后我给你分一块饼干,当你有了这个饼干就相...
Cookie+Session
cookie是监视器,session是会话
- 存储位置不同: 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)