当前位置: 代码迷 >> 综合 >> java_web 快速入门之第七章 Cookie对象session对象[新闻发布系统04]
  详细解决方案

java_web 快速入门之第七章 Cookie对象session对象[新闻发布系统04]

热度:78   发布时间:2023-12-05 09:26:37.0

一:会话

在日常生活中,从拨通电话到挂断电话之间的一连串的你问我答的过程就是一个会话。

会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。

二:Cookie对象(译为小甜饼)

基本概念:

?Cookie是客户端(一般指浏览器)请求服务器后服务器发给客户端的一个辨认标识,保存在客户端,当客户端再次向服务器发送请求时,会携带着这个辨认标识,服务器就可以通过这个标识来识别客户端的身份或状态等。

 Cookie所保存的数据是浏览器


?Cookie的作用:
                 跟踪会话,记录一次会话中(即Session,一次会话可能会有多次请求,当然也可以有多个Cookie来跟踪不同的信息)的信息,这样服务器就会知道用户的状态,比如有没有登录成功,付款时购物车中的东西等,就相当于贴在客户端脑门上的纸条,浏览器看不到,但服务器看得到。
 

常用方法:

void setMaxAge(int e);  设置Cookie有效期,单位秒,正数为多少秒后失效;负数表示当浏览器关闭时,Cookie将会被删除(争议);零表示清空Cookie
int getMaxAge();
   
获取Cookie有的效时间,单位秒
void setValue(String value);
   
 在Cookie创建后,对Cookie进行赋值
String    getValue();
   
获取Cookie的值
String    getName();
   
获取Cookie的名称
 Cookie[]    getCookies();
 
获取Cookie中所有的属性名

使用步骤:
        (1)创建Cookie对象,绑定数据(在服务器端获取指定数据通过cookie保存)
              Cookie cookie = new Cookie(key,value);

       (2)发送Cookie对象(从服务端--->客户端)
           response.addCookie(cookie)

       (3)获取Cookie,获取数据
           Cookie [] cookies = request.getCookies()

    注意事项:
            如果通过cookie进行保存数据时,数据中含有特殊的字符:空格,@&*等等
            需要进行编码和解码    
                编码 URLEncoder.encode("字符串","utf-8");
                解码 URLDecoder.decode("字符串","utf-8");    

案例:演示cookie对象方法操作

      通过cookie保存用户名

?
<%@page import="java.net.URLEncoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><%//1.创建Cookie 保存用户名   键值对的形式Cookie cookieUsername = new Cookie("username",URLEncoder.encode("张无忌", "utf-8")); //2.通过response响应对象发送的浏览器客户端进行保存response.addCookie(cookieUsername);%>?

获取页面中保存的username

<%@page import="java.net.URLDecoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><%//获取cookieCookie[] cookies = request.getCookies();//遍历//避免空指针异常的出现,判断非空if(null!=cookies){for(Cookie cookie:cookies){if("username".equals(cookie.getName())){//由于当初保存的时候含有特殊字符,进行了编码  获取后   需要进行解码out.println(cookie.getName()+"    ===   "+URLDecoder.decode(cookie.getValue(), "utf-8")+"<br/>");}}}%></body>
</html>

三:session对象

基本概念:

         session是属于jsp9大内置对象之一

         session称为“会话控制”,Session 对象存储特定用户会话所需的属性及配置信息。

         session可以临时存储数据在一个会话中,达到数据共享的目的
         session所保存的数据是在服务器端,与Cookie相反。

(1)服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象。jsp:session  servlet:HttpSession

(2)通过Session可以在应用程序的WEB页面间进行跳转时,保存用户的状态,使整个用户会话一直存在下去,直到关闭浏览器。

  (3) 与Cookie不同的是:cookie只能保存文本  session可以保存Object

         注意事项:客户端长时间不向服务端发出请求,Session对象就会自动消失。这个时间取决于服务器,例如,Tomcat服务器默认为30分钟。

常用方法:

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保存用户名

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><%//通过session保存用户名session.setAttribute("username", "张无忌");%></body>
</html>

      获取session保存的用户名

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><%String str = (String)session.getAttribute("username");out.println(str);%></body>
</html>

四:session和Cookie的区别

(1)session存储数据在服务端,Cookie在客户端

(2)session是一个内置对象,其属性也可以是任何类型,而Cookie对象只能设置字符串

(3)session没有数据大小限制,Cookie有数据大小限制

(4)session数据安全,Cookie相对于不安全

  相关解决方案