cookie与session

1,基本概念

cookie机制采用的是在客户端保持状态的方案,当你在浏览网站的时候,cookie是一个文本信息,会帮你在网站上所打的文字或是一些选择,都纪录下来。当下次你再浏览同一个网站,首先会查一下有没有上次留下的资料,有的话,就会依据 Cookie里的内容来判断使用者,送出特定的网页内容给你。

cookie机制正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本JavaScript或者VBScript也可以生成cookie。而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式 .Cookie实际上是一小段的文本信息。Java初高级一起学习分享,共同学习才是最明智的选择,喜欢的话可以我的学习群64弍46衣3凌9,或加资料群69似64陆0吧3.客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。MaxAge决定cookie的有效期,如果它是整数,在整数秒后失效,但是浏览器会将maxAge为正数的使他持久化,然后存储在对应的cookie文件中。删除cookie设置maxAge为0就行。同名的cookie,其他也相同的化会 覆盖原来的cookie,如果只有名字一样,其他不一样,是不同的cookie。

Session是在服务器上建立客户的相关信息,访问服务器时,在session中查询客户的这些信息。实现登陆可以这样做:HttpSession session = request.getSession(); // 获取Session对象session.setAttribute("loginTime", new Date()); // 设置Session中的属性out.println("登录时间为:" +(Date)session.getAttribute("loginTime")); // 获取Session属性只有在访问jsp或者Servlet等程序时才会创建session,session会设置超时时间,过了这个时间没有访问session他就会失效。

session机制,session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。 当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),如果已包含则说明以前已经为此客户端创建session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。一般这个cookie的名字都是类似于SEEESIONID。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。 经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面。还有一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器.

cookie 和session 的区别:1、cookie数据存放在客户的浏览器上,session数据放在服务器上。2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE。4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。5、 将登陆信息等重要信息存放为SESSION 其他信息如果需要保留,可以放在COOKIE中转博客https://www.cnblogs.com/shiyangxt/articles/1305506.htmlhttps://blog.csdn.net/fangaoxin/article/details/6952954Cookies

与Session的应用场景:登陆验证信息。一般采用Session("Logon")=true or false的形式。用户的各种私人信息,比如姓名等,某种情况下,需要保存在Session里需要在页面间传递的内容信息,比如调查工作需要分好几步。每一步的信息都保存在Session里,最后在统一更新到数据库。

cookie最典型的应用是: (一):判断用户是否登陆过网站,以便下次登录时能够直接登录。如果我们删除cookie,则每次登录必须从新填写登录的相关信息。(二):另一个重要的应用是“购物车”中类的处理和设计。用户可能在一段时间内在同一家网站的不同页面选择不同的商品,可以将这些信息都写入cookie,在最后付款时从cookie中提取这些信息,当然这里面有了安全和性能问题需要我们考虑了。

登录页面:login.jsp <%--本页面提供登录表单,还要显示错误信息 --%>

登录

<%    String uname ="";    Cookie[] cs = request.getCookies();    if(cs!=null){      for(Cookie c:cs){      if("uname".equals(c.getName()))      {        uname=c.getValue();      }      }    }    %>    <%    String message="";    String msg = (String)request.getAttribute("msg");    if(msg!=null){      message = msg;    }    %><%=message %>

用户名:

密 码:

4,自己写:servlet处理页面

LoginServlet.java public void doPost(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException

{  //获取表单数据  //处理编码问题 

request.setCharacterEncoding("UTF-8"); 

String username = request.getParameter("username"); 

String password = request.getParameter("password");  //校验用户名和密码是否正确 

if(!"itcast".equalsIgnoreCase(username))

{//登陆成功      Cookie cookie = new Cookie("uname",username);//获取cookie 

  cookie.setMaxAge(60*60*24);  response.addCookie(cookie);     

HttpSession session = request.getSession();//获取session 

 session.setAttribute("username", username);//向session域中存username  response.sendRedirect("/hellosession1/session2/succ1.jsp");  }

else{//登录失败  //如果失败,保存到request域中,转发到login.jsp  request.setAttribute("msg", "用户名或密码错误");  request.getRequestDispatcher("/session2/login.jsp").forward(request, response);  }  } 

登录成功页面:succ1.jsp    <%      String username = (String)session.getAttribute("username");      if(username==null){      request.setAttribute("msg", "您还没有登录,请先登录!");      request.getRequestDispatcher("/session2/login.jsp").forward(request, response);      return;      }    %>

登录成功

欢迎回来<%=session.getAttribute("username") %>    自己的代码:1,session(1)Index页面<% response.sendRedirect("/index.do"); %> 写在body中(2)跳转 (3)登陆页代码<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>

4,登陆成功后代码<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>

${sessionScope.user.name }登录成功!!!

欢迎您,${sessionScope.name }

5,后台代码

package com.cust.CS.controller;

import org.springframework.stereotype.Controller;

import org.springframework.ui.ModelMap;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.SessionAttributes;

import com.cust.CS.pojo.Cs;

@Controller("/console")

@SessionAttributes({"user","name"})

public class Login

 {@RequestMapping("/login.do")

public String Login_l(Cs user,ModelMap map)

{//user会自己注入session中//将name放入session作用域中,这样转发页面也可以取到这个数据。

map.addAttribute("name", user.getName());return "/loginSuccess";}} 

Cookie<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 目录Cookie机制什么是CookieCookie的不可跨域名性Unicode编码:保存中文BASE64编码:保存...
    Tomatoro阅读 16,915评论 7 186
  • 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Se...
    chinariver阅读 5,595评论 1 49
  • 暖暖的风,淡淡的云,清晨落下的雨也不知所踪,微蓝的天,缱绻着五月的阳光,花依旧在星城各个角落开放着,绿荫斑驳了...
    那些年聆听的阅读 68评论 0 0
  • 马上就要结束,意味着该分散了,最后这几天求关注的心理还是蛮强的,因为对之后的工作有点迷茫,不知道该做预售还...
    是军儿呀阅读 398评论 0 3
  • 如若不关心实现细节可直接查看“ObjectBox 架构”、“总结”这两部分内容。(简书不支持锚点(;′⌒`)) 一...
    Cavabiao阅读 1,996评论 1 9