JSP数据交互(二)------cookie

一 . 什么是cookie(javax.servlet.http)

答 : 1 . cookie是由Netscape公司发明 , 是最常用的跟踪用户会话的方式 ;

      2 . 它是由服务器端生成并发送给客户端浏览器的 , 浏览器会将其保存为某个目录下的文件 ;

      3 . cookie一般是用户在浏览网站的时候输入的一些文字信息或者选择 , 当用户下一次访问该网站时 , 服务器会先从客户端查看是否有保存下来的cookie信息 , 然后根据cookie的内容 , 呈现特定的页面给用户 ;

      4 . 最典型的cookie应用情景就是保存用户登录网站的一些帐号和密码 , 用户可以选择下次自动登录 , 以简化操作 , 但在数据上 , 可能会有安全问题的存在 ;

二 . cookie作用的体现

答 : 1 . 对特定对象的追踪 , 如访问者的访问次数 , 最后的访问时间 , 路径等 ; 

      2 . 统计网页的浏览次数 ; 

      3 . 在cookie的有效期内记录用户的登录信息 ; 

      4 . 实现各种个性化服务 , 如针对不同用户喜好 , 以不同的风格展示不同的内容 ; 

三 . 在JSP中使用cookie

答 : 1 . 创建cookie对象

           Cookie newCookie=new Cookie(String name,String value);

      2 . 写入cookie

          response.addCookie(newCookie);

四 . cookie的常用方法

答 : 1 . void setMaxAge(int expiry) : 设置cookie的有效期以秒为单位 ; 

      2 . void setValue(String value) : 在cookie对象创建后 , 为cookie对象赋予新的值 ; 

      3 . String getName() : 获得cookie的名称 ;

      4 . String getValue() : 获取cookie的值 ;

      5 . int getMaxAge() : 获取cookie的有效时间 , 以秒为单位 ;

五 . cookie的存取

答 : //首先创建一个setCookie.jsp页面

<body>

<%

response.addCookie(new Cookie("userName", "Jack"));

response.addCookie(new Cookie("password", "123456"));

response.sendRedirect("getCookie.jsp");

%>

</body>

      //这是getCookie.jsp页面

<body>

<%

Cookie[] cookies = request.getCookies();

String user = "";

String pwd = "";

if (cookies != null) {

for(int i=0;i<cookies.length;i++){

if(cookies[i].getName().equals("userName")){

user=cookies[i].getValue();

}else if(cookies[i].getName().equals("password")){

pwd=cookies[i].getValue();

}

}

}

%>

用户名 : <%=user %><br/>

密码 : <%=pwd %>

</body>

      特别注意 : 

          1 . 通过response对象的addCookie()方法写入cookie ;

          2 . 通过request对象的getCookie方法得到cookie数组 , 之后进行遍历输出cookie的值 ;

          3 . cookie是通过name/value方式进行保存的 , 因此必须先调用cookie对象的getName()方法对每个数组成员的名称进行检查 , 直到找到我们需要的cookie , 之后用getValue()方法获取名称对应的值 ; 

六 . 验证sessionid是否以cookie的形式存储在客户端

答 : //setCookie中的代码

<%

    session.setAttribute("test", "hello");

    response.sendRedirect("getCookie2.jsp");

 %>

      //getCookie中的代码

getId方式获得的sessionid :

<%=session.getId()%>

<br />

<%

Cookie[] cookies = request.getCookies();

if (cookies != null) {

for (int i = 0; i < cookies.length; i++) {

out.print("Cookie中的sessionid : "+cookies[i].getValue());

}

}

%>

      经过比较 , 两者是相同的 , 说明sessionid也是以cookie的形式存储在客户端的 ; 

      特别注意 : 

      如果不实用response重定向 , 而是使用getRequestDispatcher().forward(request,response)转发的话 , 是看不到cookie中的JSESSIONID的 , 因为重定向是将页面重新定向到一个新的地址 , 在跳转之前 , 已经对上一个请求作出了响应 , 在客户端写入了cookie ; 如果用转发的形式 , 跳转之前并没有对上一个请求做出响应 , 因而在客户端没有写入cookie , 这个时候只要直接输入URL , 再次跳转后的页面 , 就可以看到上次响应写入的cookie ;

猜你喜欢

转载自blog.csdn.net/dyz4001/article/details/80033098
今日推荐