您的位置:首页 > 其它

cookie&session

2012-08-02 00:17 274 查看

会话技术

1.      
会话,用户打开浏览器,点了一些超链接,关闭浏览器的过程

2.      
会话过程中会产生一些数据,这些数据是每个用户独享的,需要找个地方存起来

3.      
会话技术就是解决上述问题的,Cookie是客户端技术,Session是服务器端技术

 

Cookie对象

1.      
Cookie对象的创建

Cookie cookie = new Cookie(name, value);

2.      
发送Cookie

response.addCookie(cookie);

3.      
获取指定的Cookie

      // 获得用户发送的所有Cookie
      Cookie[] cookies = request.getCookies(); // 如果没发Cookie过来,为null
      // 遍历 找到lastAccessTime
      String
lastAccessTime = null;
      for(int i=0; cookies!=null&&i<cookies.length; i++) {
         String name = cookies[i].getName();  // 一个Cookie的name
         if("lastAccessTime".equals(name)) {
            // 找到了, 几下value
           
lastAccessTime = cookies[i].getValue();
         }
      }

4.      
设置Cookie的有效时间

cookie默认情况下在当前浏览器进程有效,如果想让cookie长期驻留客户机的硬盘,就需要指定时间

cookie.setMaxAge(time)  time以秒为单位

setMaxAge(0) 
通知浏览器删除该Cookie

 

设置cookie的有效路径

浏览器会将所有和当前路径匹配的cookie都发给服务器

 

5.      
显示用户最近的浏览记录

两个页面

显示所有的商品(从数据库找出商品显示),显示最近的记录(读取客户发送的Cookie中存的id,找出书显示)

CookieDemo2

显示商品的详细信息,并向客户端发送Cookie,难点如果产生新的Cookie

将客户端带过来的Cookie分割后存入集合,根据不同的情况将新的id加进去,迭代集合用分隔符串起来

CookieDemo3

 

 

Session对象

1.      
session的原理

request对象有个方法是getSession()

首先看浏览器是否发送了Cookie (JSESSIONID) ,如果发了,拿着id去内存中找对应的session对象返回

如果没有发Cookie或者没找到对应的Session对象,创建一个新的Session对象

getSession( boolean create)

create 为true的时候,如果内存有session就返回,没有就创建新的

create为false的时候,意味着只查找不创建,有就返回,没有不创建,返回null;

 

 

2.      
session的运行要依靠cookie来发送JSESSIONID

如果想让多个浏览器共享一个session,我们就需要人工发送Cookie,并设置Cookie的有效时间

 

3.如果浏览器禁用Cookie,那么Session也玩不起来了

 

浏览器禁用Cookie

要想让session好用,就需要在页面跳转时发送sessionid

有一个技术url重写

重写后的地址会在原有的url地址的基础上加上JSESSIONID

如果是超链接或表单提交的地址,重写方式如下:

String newUrl = response.encodeURL(url);

如果是请求重定向的地址,方式如下:

String newUrl = response.encodeRedirectURL(url);

 

3.  session的应用 (重点)

简单购物车的实现  ListServlet BuyServlet ListCartServlet

用户登录 Login.jsp LoginServlet indes.jsp LogoutServlet

防止表单重复提交

可以用js来做,但是只能增加用户的体验,不能完全防止坏人

用session做防表单重复提交

FormServlet   HandleFormServlet  TokenProcessor
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: