cookie 和 Sessio会话技术

创建cookie

  1. //如何创建cookie案例
  2. packagecom.tsinghua;
  3.  
  4. importjavax.servlet.http.*;
  5. importjava.io.*;
  6.  
  7.  
  8. publicclassCookieTest1extendsHttpServlet{
  9. //处理get请求
  10. publicvoiddoGet(HttpServletRequestreq,HttpServletResponseres){
  11. //业务处理
  12. try{
  13. //处理中文乱码
  14. res.setContentType("text/html;charset=gbk");
  15. PrintWriterpw=res.getWriter();
  16.  
  17. //当用户访问该servlet时,就将信息创建到该用户的cookie中
  18. //1、先在服务器端创建一个cookie
  19. CookiemyCookie=newCookie("color1","red");
  20. //2、该cookie存在的时间
  21. myCookie.setMaxAge(30);
  22. //如果不设置时间,那么Cookie将不会被保存
  23.  
  24. //3、将Cookie写回到客户端
  25. res.addCookie(myCookie);
  26.  
  27. pw.println("已经创建了Cookie");
  28. }catch(Exceptione){
  29. e.printStackTrace();
  30. }
  31. }
  32. }

常用的API

 

1.setMaxAge
cookie的有效期,正值为以秒计算过时失效,负值为关闭客户端失效,默认值为-1。

2.setDomain
用于指定只有请求了指定的域名,才会带上该cookie

3.setPath
只有访问该域名下的cookieDemo的这个路径地址才会带cookie

4.setValue
重置value的值
 

Session的会话流程

 

 

 

 

session对象的创建与获取

 

一、流程

登录接口--》验证用户名密码--》获取用户实体对象--》创建session (key,value)

其他接口调用--》获取session(key)  

 

二、代码

 
  1.      //登录并写入缓存

  2. @RequestMapping("a/login")

  3. @ResponseBody

  4. public String loginAction(HttpSession session, String userName, String password, HttpServletRequest request) {

  5.  
  6. HrUser hr=new HrUser();

  7. hr.setNickName(userName);

  8. session.setAttribute("userInfo", hr);

  9. return "";

  10. }

  11. //对外获取缓存

  12. @RequestMapping("a/logb") // , method = RequestMethod.POST)

  13. @ResponseBody

  14. public String logb() {

  15. Object pp=getSession().getAttribute("userInfo");

  16. String result="1";

  17. if(pp!=null)

  18. {

  19. result=((HrUser)pp).getNickName();

  20. }

  21. return result;

  22. }

  23.  
  24. //获取会话缓存内容

  25. private HttpSession getSession() {

  26. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())

  27. .getRequest();

  28. return request.getSession();

  29. }

三、效果

A用户 本地运行代码,先调用   a/login接口传参?userName=1234    ,再调用 a/logb  会返回1234   一存一取成功

B用户 在A用户执行完存取操作后,执行  a/logb  ,不会返回任何东西,因为只有A用户的会话才有缓存,这时 B去执行 a/login接口传参?userName=12345    ,再调用 a/logb  会返回12345      A用户执行  调用 a/logb  只会返回自己会话的缓存1234  

session对象存储数据

 

1、调用session对象的方法保存或读取客户在服务器端的有关数据。

2、session对象处理数据的方法://key都是String类型的

①public void setAttribute(String key, Object obj)//key是String类型的,value是Object类型的

②public Object getAttibute(String key)//key是String类型的,value是Object类型的,在使用的过程中,不要忘记强制转换

③public Enumeration getAttributeNamesO

④public void removeAttribute(String name)

session的生命周期

Session存储在服务器端,一般为了防止在服务器的内存中(为了高速存取),Sessinon在用户访问第一次访问服务器时创建,需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session,可调用request.getSession(true)强制生成Session。

实现会话持久化(Permanent Session)(1)   
//注意,需要引用System.Runtime.Serialization.Formatters.Soap.dll程序集 
public const string SESSIONDATAPATH = "C:/SessionData/" ;
private void Application_AcquireRequestState( object sender, EventArgs e)                           
 {     
       System.IO.FileStream fs; 
        System.Runtime.Serialization.Formatters.Soap.SoapFormatter sf  =  new System.Runtime.Serialization.Formatters.Soap.SoapFormatter(); 
        try 
        {  
            //获取特定的cookie,如果找不到,则退出.
            HttpCookie cookie = Request.Cookies["PermSessionID"]; 
            if(cookie == null) 
            {
                //如果找不到,则生成一个(使用伪随机的SessionID) 
               cookie = new HttpCookie("PermSessionID", Session.SessionID);
               //使该cookie在1星期之后到期
               cookie.Expires = DateTime.Now.AddDays(7);
               //将其发往客户端浏览器 
< TD> Response.Cookies.Add(cookie); 
            }
             //文件名等于该cookie的值 
             string permSessionId = cookie.Value; 
             //生成数据文件的名称 
            string filename = SESSIONDATAPATH + permSessionId.ToString() + ".xml"; 
            //打开文件,如果出错,则退出 
            fs = new System.IO.FileStream(filename, IO.FileMode.Open); 
            //反序列化包含值的Hashtable Hashtable ht = (Hashtable)sf.Deserialize(fs); 
            //将数据移到Session集合中 
            Session.Clear(); 
            foreach( string key in ht.Keys )
            {
                Session(key) = ht(key); 
            }
      } 
     Catch(Exception ex) {} 
      Finally 
      {
< TD>if( fs != null ) fs.Close();
      } 
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值