既然学习了javaweb,我就确定避免不了要去接触cookie和seesion下面简单的描述一下二者:css
cookie:html
在网站登陆的时候,会有一个再次网站下记住密码的选项,若是你选上了,下次登陆的时候就不用再从新输入帐号密码,java
这就cookie实现的一个小功能。web
客户端经过浏览器向服务器发出请求(记住帐号密码)服务器响应客户端给客户端发送一个大约4kb左右的文档存放在客后端
户端浏览器当中,这个文档就属于一个cookie,当用户再一次打开浏览器登陆时,这时就须要你从新输入帐号密码浏览器浏览器
直接从cookie中取值。安全
cooki的生命周期默认状况下:从客户端开启浏览器到关闭浏览器 (能够设置cookie的有效期,从而实现永久有效);bash
建立 cookie : Cookie c = new Cookie("name", "value");
服务器
设置有效期: c.setMaxAge(24 * 60 * 60); //以秒为单位 这个是一天的时长
cookie
设置有效路径: c.setPath("127.0.0.1");
保存cookie: response.addCookie(c); //使用response将cookie保存在客户端浏览器里
删除cookie: Cookie cookie = new Cookie(WebConst.USER_IN_COOKIE, "");
cookie.setMaxAge(0);
response.addCookie(cookie);//将cookie有效求设置为零
有一段实例代码可供参考:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Cookie[] cookies = request.getCookies(); if(cookies == null) { Cookie cookie = new Cookie("admin", "123456"); cookie.setMaxAge(7*24*3600); response.addCookie(cookie); System.out.println("cookie为空,跳转登陆页面"); response.sendRedirect("Login.jsp"); }else { String name = request.getParameter("name"); String pwd = request.getParameter("pwd"); for (Cookie cookie1 : cookies) { System.out.println("用户名:"+cookie1.getName()+"密码:"+cookie1.getValue()); if (name.equals(cookie1.getName()) && pwd.equals(cookie1.getValue())) { System.out.println("cookie不为空,跳转成功页面"); request.getRequestDispatcher("s.jsp").forward(request, response); }else { request.getRequestDispatcher("NewFile.jsp").forward(request, response); } } } }
seesion:
seesion与cookie不一样,seesion是创建在服务器的一个会话,这里讲通俗一点,seesion就至关于一个会议室,
当客户端和服务器要进行交流的时候,服务器就会分配一个小房间给他们两个进行交流,这个小房间当服务器或者客
户端任何一方退出的时候(即服务器关闭或者客户端关闭),这个小房间就会被服务器收回。这就是一个seesion会话
因为seesion是在服务端里面的一种存在,咱们是不可见的因此seesion比cookie更加安全:
seesion常见的几种方法:
一、public void setAttribute(String name,String value)设定指定名字的属性的值,并将它添加到session会话范围内,若是这个属性是会话范围内存在,则更改该属性的值。 二、public Object getAttribute(String name)在会话范围内获取指定名字的属性的值,返回值类型为object,若是该属性不存在,则返回null。 三、public void removeAttribute(String name),删除指定名字的session属性,若该属性不存在,则出现异常。 四、public void invalidate(),使session失效。能够当即使当前会话失效,原来会话中存储的全部对象都不能再被访问。 五、public String getId( ),获取当前的会话ID。每一个会话在服务器端都存在一个惟一的标示sessionID,session对象发送到浏览器的惟一数据就是sessionID,它通常存储在cookie中。 六、public void setMaxInactiveInterval(int interval) 设置会话的最大持续时间,单位是秒,负数代表会话永不失效。 七、public int getMaxInActiveInterval(),获取会话的最大持续时间,使用时候须要一些处理
不要混淆 session 和 session 实现。
下面一段话来自知乎
原本 session 是一个抽象概念,开发者为了实现中断和继续等操做,将 user agent 和 server 之间一对一的交互,抽象为“会话”,进而衍生
出“会话状态”,也就是 session 的概念。而 cookie 是一个实际存在的东西,http 协议中定义在 header 中的字段。能够认为是 session
的一种后端无状态实现。而咱们今天常说的 “session”,是为了绕开 cookie 的各类限制,一般借助 cookie 自己和后端存储实现的,一种更高
级的会话状态实现。因此 cookie 和 session,你能够认为是同一层次的概念,也能够认为是不一样层次的概念。具体到实现,session 由于
session id 的存在,一般要借助 cookie 实现,但这并不是必要,只能说是通用性较好的一种实现方案。
做者:欲三更 连接:https://www.zhihu.com/question/19786827/answer/84540780
上次写上面的cookie代码的时候,要验证输入框的的值是否和存的cookie相同时 我发现浏览器会同时会保存两个cookie
后来百度才了解到有一个cookie是seesion_id做为cookie保存在浏览器里,当结束此次seesion会话是第一个cookie也会随
着摧毁。
参考连接:https://www.jianshu.com/p/efee53ccd12e
http://www.javashuo.com/article/p-eeltcjba-cx.html
注:我的学习QAQ ,若有错误,还请指点,谢谢qwq