java中的cookie和session及其常用方法
- 格式:doc
- 大小:25.00 KB
- 文档页数:4
java之cookie和session(介绍较详细)2010年03月15日星期一15:06一、cookie机制和session机制的区别********************************************************************** ***************具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。
同时我们也看到,由于才服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择********************************************************************** ***************二、会话cookie和持久cookie的区别********************************************************************** ***************如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。
这种生命期为浏览会话期的cookie被称为会话cookie。
会话cookie一般不保存在硬盘上而是保存在内存里。
如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。
存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。
而对于保存在内存的cookie,不同的浏览器有不同的处理方式。
********************************************************************** ***************三、如何利用实现自动登录********************************************************************** ***************当用户在某个网站注册后,就会收到一个惟一用户ID的cookie。
session、cookie、token的区别及联系sessionsession的中⽂翻译是“会话”,当⽤户打开某个web应⽤时,便与web服务器产⽣⼀次session。
服务器使⽤session把⽤户的信息临时保存在了服务器上,⽤户离开⽹站后session会被销毁。
这种⽤户信息存储⽅式相对cookie来说更安全,可是session有⼀个缺陷:如果web服务器做了负载均衡,那么下⼀个操作请求到了另⼀台服务器的时候session会丢失。
cookiecookie是保存在本地终端的数据。
cookie由服务器⽣成,发送给浏览器,浏览器把cookie以kv形式保存到某个⽬录下的⽂本⽂件内,下⼀次请求同⼀⽹站时会把该cookie发送给服务器。
由于cookie是存在客户端上的,所以浏览器加⼊了⼀些限制确保cookie不会被恶意使⽤,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的。
cookie的组成有:名称(key)、值(value)、有效域(domain)、路径(域的路径,⼀般设置为全局:"\")、失效时间、安全标志(指定后,cookie 只有在使⽤SSL连接时才发送到服务器(https))。
下⾯是⼀个简单的js使⽤cookie的例⼦:⽤户登录时产⽣cookie:document.cookie = "id="+result.data['id']+"; path=/";document.cookie = "name="+result.data['name']+"; path=/";document.cookie = "avatar="+result.data['avatar']+"; path=/";使⽤到cookie时做如下解析:var cookie = document.cookie;var cookieArr = cookie.split(";");var user_info = {};for(var i = 0; i < cookieArr.length; i++) {user_info[cookieArr[i].split("=")[0]] = cookieArr[i].split("=")[1];}$('#user_name').text(user_info[' name']);$('#user_avatar').attr("src", user_info[' avatar']);$('#user_id').val(user_info[' id']);tokentoken的意思是“令牌”,是⽤户⾝份的验证⽅式,最简单的token组成:uid(⽤户唯⼀的⾝份标识)、time(当前时间的时间戳)、sign(签名,由token的前⼏位+盐以哈希算法压缩成⼀定长的⼗六进制字符串,可以防⽌恶意第三⽅拼接token请求服务器)。
JAVA操作COOKIE在Java中,可以使用Cookie类来操作和管理Cookie。
Cookie是一种存储在客户端浏览器中的小型文本文件,用于存储一些浏览器相关的信息。
首先,我们需要在Java中创建Cookie对象。
可以使用以下代码创建一个名为username的Cookie并将其添加到响应中:```Cookie cookie = new Cookie("username", "John");response.addCookie(cookie);```在这个例子中,我们创建了一个名为username的Cookie,并将其值设置为John。
然后,我们使用response对象的addCookie方法将Cookie 添加到响应中。
如果希望设置Cookie的过期时间,可以使用setMaxAge方法来设置Cookie的生命周期。
以下是一个例子:```Cookie cookie = new Cookie("username", "John");cookie.setMaxAge(3600); // 设置Cookie的生命周期为1小时response.addCookie(cookie);```在这个例子中,我们将Cookie的生命周期设置为3600秒(1小时)。
当浏览器接收到这个Cookie后,它将在1小时后被自动删除。
在Java中获取Cookie也很简单。
可以使用HttpServletRequest对象的getCookies方法来获取在该请求中发送的所有Cookie。
以下是一个例子:```Cookie[] cookies = request.getCookies(;if (cookies != null)for (Cookie cookie : cookies)String name = cookie.getName(;String value = cookie.getValue(;//进行一些操作...}```在这个例子中,我们首先使用request对象的getCookies方法获取所有的Cookie。
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。
常用的会话跟踪技术是Cookie与Session。
Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session。
1.1 Session机制除了使用Cookie,Web应用程序中还经常使用Session来记录客户端状态。
Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力。
1.1.1 什么是SessionSession是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。
客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。
这就是Session。
客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。
Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。
1.1.2 实现用户登录Session对应的类为javax.servlet.http.HttpSession类。
每个来访者对应一个Session对象,所有该客户的状态信息都保存在这个Session对象里。
Session对象是在客户端第一次请求服务器的时候创建的。
Session也是一种key-value的属性对,通过getAttribute(String key)和setAttribute(String key,Object value)方法读写客户状态信息。
Servlet里通过request.getSession()方法获取该客户的Session,例如:HttpSession session = request.getSession(); // 获取Session对象session.setAttribute("loginTime", new Date()); // 设置Session中的属性out.println("登录时间为:" + (Date)session.getAttribute("loginTime"));// 获取Session属性request还可以使用getSession(boolean create)来获取Session。
写cookie,取cookie1、添加cookies(用户信息保存,修改都会依赖cookies)HttpCookie cookies = newHttpCookie("Porschev");cookies["name"] = "Zhong Wei";cookies["sex"] = "1";cookies.Expires = DateTime.Now.AddMinutes(20);Response.Cookies.Add(cookies);2、修改cookies( 在程序中难免会操作,对用户信息的修改,更新数据库后,也会修改cookies,为了修改后的显示)方法一:HttpCookie cookies =Request.Cookies["Porschev"];cookies["name"] = "wilson Z";再取cookies中的name,结果:wilson Z;当这样修改cookies 时,在更新方法中再取这个名为Porschev的cookies,name 的值还为Zhong Wei而非wilson Z,页面显示也不对(己排除页面缓存原因,更新也确实没有成功)修改方法一:HttpCookie cookies =Request.Cookies["Porschev"];cookies["name"] = "wilson Z";//加上下面一句Response.Cookies["Porschev"].Expires = DateTime.Now.AddMinutes(-1);再次测式,结果正确,取出name的值为:wilson Z,页面显示也正确。
DateTime.Now.AddMinutes(-1)让以前存入过期时间为20min的cookies失效3、得到cookiesHttpCookie cookies =Request.Cookies["Porschev"];string name = cookies["name"]; //通过key取出对应value,多key同理取4、删除cookies方法一:(最常用的一个删除cookies方法)if (Request.Cookies["Porschev"] != null){HttpCookie cookies = newHttpCookie("Porschev");cookies.Expires =DateTime.Now.AddDays(-1);Response.Cookies.Add(cookies);}在项目中测式,删除部分cookies失败,于是换一种方法foreach (string cookiename inRequest.Cookies.AllKeys){HttpCookie cookies =Request.Cookies[cookiename];if (cookies != null){cookies.Expires =DateTime.Today.AddDays(-1);Response.Cookies.Add(cookies);Request.Cookies.Remove(cookiename);}}方法一只能删除提当前Response中的cookies,不对完成删除掉客端的cookies,用遍历cookies的方式可以 Session的用法Session简介:简单来说就是服务器给客户端的一个编号。
Java中Session的详解1.什么是session: ·服务器会给每⼀个⽤户(浏览器)创建⼀个session对象 ·⼀个session独占⼀个浏览器,只要浏览器不关闭,这个session就⼀直存在 ·session称为会话控制,存储⽤户会话所需的属性和配置信息,这样,⽤户在应⽤程序的web页⾯跳转时,存储在session对象中的⽤户信息不会丢掷,⽽是在整个⽤户会话中⼀直保持下去2.session的经典应⽤场景: ·⼀个⽤户登陆后,访问该⽹站的其他⽹页时,⼀直处于登录状态 ·保存购物车信息等等3.session中常⽤的⽅法 ·getId():获取session的唯⼀标识 ·getServletContext():代表整个web服务 ·getAttribute(String):获取session的节点,⽐如你在其中⼀个Servlet中通过setAttribute(String,Object)配置了相关的session信息,然后通过另⼀个Servlet获取这个Servlet中的session信息,就要⽤到getAttribute(String)这个⽅法 ·setAttribute(String,Object):设置session节点 ·removeAttribute(String):⼀出⼀个session节点 ·isNew():判断⼀个session是否是⼀个新的session ·invalidate():注销session的4.例1:创建⼀个session并获取到session的ID,判断这个session是否是新的session ·步骤1:新建⼀个maven项⽬,使⽤webapp模板 ·步骤2:在Java⽂件夹下创建⼀个com.xiaoma.servlet.SessionDemo01的类,编写servlet类⽂件1package com.xiaoma.servlet;23import com.xiaoma.pojo.Person;5import javax.servlet.ServletException;6import javax.servlet.http.HttpServlet;7import javax.servlet.http.HttpServletRequest;8import javax.servlet.http.HttpServletResponse;9import javax.servlet.http.HttpSession;10import java.io.IOException;1112public class SessionDemo01 extends HttpServlet {13 @Override14protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {15//解决中⽂乱码16 resp.setHeader("content-type","text/html;charset=UTF-8");17//得到session18 HttpSession session = req.getSession();19//通过setAttribute⽅法向Session中存放信息20 session.setAttribute("name","⼩马");21//获取session相关信息,包括id,是否是新的session等22 String sessionId = session.getId();23if(session.isNew()) {24 resp.getWriter().write("创建Session成功,ID为:" + sessionId);25 }else{26 resp.getWriter().write("Session已经存在了,ID为:" + sessionId);27 }28 }2930 @Override31protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {32 doGet(req, resp);33 }34 } ·步骤2:配置XML⽂件1<servlet>2<servlet-name>SessionDemo01</servlet-name>3<servlet-class>com.xiaoma.servlet.SessionDemo01</servlet-class>4</servlet>5<servlet-mapping>6<servlet-name>SessionDemo01</servlet-name>7<url-pattern>/s1</url-pattern>8</servlet-mapping> 例2:从⼀个servlet中读取另⼀个servlet中的session信息 ·步骤1:在Java⽂件夹下创建⼀个com.xiaoma.servlet.SessionDemo01的类,编写servlet类⽂件1package com.xiaoma.servlet;23import com.xiaoma.pojo.Person;45import javax.servlet.ServletException;6import javax.servlet.http.HttpServlet;7import javax.servlet.http.HttpServletRequest;8import javax.servlet.http.HttpServletResponse;9import javax.servlet.http.HttpSession;10import java.io.IOException;1112public class SessionDemo01 extends HttpServlet {13 @Override14protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {15//解决中⽂乱码16 resp.setHeader("content-type","text/html;charset=UTF-8");17//得到session18 HttpSession session = req.getSession();19//通过setAttribute⽅法向Session中存放信息20 session.setAttribute("name","⼩马");21//获取session相关信息,包括id,是否是新的session等22 String sessionId = session.getId();23if(session.isNew()) {24 resp.getWriter().write("创建Session成功,ID为:" + sessionId);25 }else{26 resp.getWriter().write("Session已经存在了,ID为:" + sessionId);27 }28 }2930 @Override31protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {32 doGet(req, resp);33 }34 } ·步骤2:在Java⽂件夹下创建⼀个com.xiaoma.servlet.SessionDemo02的类,编写另⼀个⽤来读取的servlet类,通过SessionDemo02来读取SessionDemo01中的session信息1package com.xiaoma.servlet;23import com.xiaoma.pojo.Person;4import javax.servlet.ServletException;5import javax.servlet.http.HttpServlet;6import javax.servlet.http.HttpServletRequest;7import javax.servlet.http.HttpServletResponse;8import javax.servlet.http.HttpSession;9import java.io.IOException;1011public class SessionDemo02 extends HttpServlet {12 @Override13protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {14//解决中⽂乱码15 resp.setHeader("content-type","text/html;charset=UTF-8");16//得到session17 HttpSession session = req.getSession();18 String name=(String) session.getAttribute("name");19 resp.getWriter().write(name);20 }2122 @Override23protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {24super.doPost(req, resp);25 }26 } ·步骤3:配置xml⽂件1<servlet>2<servlet-name>SessionDemo02</servlet-name>3<servlet-class>com.xiaoma.servlet.SessionDemo02</servlet-class>4</servlet>5<servlet-mapping>6<servlet-name>SessionDemo02</servlet-name>7<url-pattern>/s2</url-pattern>8</servlet-mapping> 例3:session中还可以存放对象信息 ·步骤1:在Java⽂件夹下创建⼀个com.xiaoma.pojo.Person的类,编写我们的实体类1package com.xiaoma.pojo;23public class Person {4private String name;5private int age;67public Person() {8 }910public Person(String name, int age) { = name;12this.age = age;13 }1415public String getName() {16return name;17 }1819public void setName(String name) { = name;21 }2223public int getAge() {24return age;25 }2627public void setAge(int age) {28this.age = age;29 }3031 @Override32public String toString() {33return "Person{" +34 "name='" + name + '\'' +35 ", age=" + age +36 '}';37 }38 } ·步骤2:在Java⽂件夹下创建⼀个com.xiaoma.servlet.SessionDemo01的类,编写servlet类⽂件 1package com.xiaoma.servlet;23import com.xiaoma.pojo.Person;45import javax.servlet.ServletException;6import javax.servlet.http.HttpServlet;7import javax.servlet.http.HttpServletRequest;8import javax.servlet.http.HttpServletResponse;9import javax.servlet.http.HttpSession;10import java.io.IOException;1112public class SessionDemo01 extends HttpServlet {13 @Override14protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 15//解决中⽂乱码16 resp.setHeader("content-type","text/html;charset=UTF-8");17//得到session18 HttpSession session = req.getSession();19//通过setAttribute⽅法向Session中存放信息20 session.setAttribute("name",new Person("⼩马",18));21//获取session相关信息,包括id,是否是新的session等22 String sessionId = session.getId();23if(session.isNew()) {24 resp.getWriter().write("创建Session成功,ID为:" + sessionId);25 }else{26 resp.getWriter().write("Session已经存在了,ID为:" + sessionId);27 }28 }2930 @Override31protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {32 doGet(req, resp);33 }34 } ·步骤3:在Java⽂件夹下创建⼀个com.xiaoma.servlet.SessionDemo02的类,编写另⼀个servlet类⽂件,⽤来读取SessionDemo01中的Session对象信息1package com.xiaoma.servlet;23import com.xiaoma.pojo.Person;45import javax.servlet.ServletException;6import javax.servlet.http.HttpServlet;7import javax.servlet.http.HttpServletRequest;8import javax.servlet.http.HttpServletResponse;9import javax.servlet.http.HttpSession;10import java.io.IOException;1112public class SessionDemo02 extends HttpServlet {13 @Override14protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {15//获取session中的Person对象16//解决中⽂乱码17 resp.setHeader("content-type","text/html;charset=UTF-8");18//得到session19 HttpSession session = req.getSession();20 Person person=(Person) session.getAttribute("name");21 resp.getWriter().write(person.toString());22 }2324 @Override25protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {26super.doPost(req, resp);27 }28 } ·步骤4:编写xml⽂件,与上同理 例4:注销session(注销session有两种⽅式,⼀种是通过removeAttribute(String)⽅法,另⼀种是通过xml配置⽂件) ·第⼀种,通过removeAttribute(String)⽅法,这种⽅式是使session⼿动过期1package com.xiaoma.servlet;23import javax.servlet.ServletException;4import javax.servlet.http.HttpServlet;5import javax.servlet.http.HttpServletRequest;6import javax.servlet.http.HttpServletResponse;7import javax.servlet.http.HttpSession;8import java.io.IOException;910public class SessionDemo03 extends HttpServlet {11 @Override12protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {13//得到session14 HttpSession session = req.getSession();15//⼿动注销session16 session.removeAttribute("name");17 session.invalidate();18 }1920 @Override21protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {22super.doPost(req, resp);23 }24 } ·第⼆种,通过xml⽂件的⽅法,这种⽅式是时session⾃动过期1<!--设置session的存活时间-->2<session-config>3<!--以分钟为单位-->4<session-timeout>1</session-timeout>5</session-config>5.session与cookie的区别 ·(1)cookie是吧⽤户的数据写给浏览器,浏览器保存(可以保存多个) ·(2)session是把⽤户的数据写给⽤户独占的session中,服务器保存(保存重要信息,避免浪费服务器资源) ·(3)session是由服务器创建的。
Java使用cookie和session当某个用户发出页面请求时,WEB服务器只是简单的进行响应,然后就关闭与该用户的连接,请求的相关数据将不再存在,这样明显有不好的地方。
cookie和session解决了这一问题,客户端(一般是浏览器)与服务器之间的交互,将操作所涉及的数据记录下来,保存在cookie(保存在浏览器客户端)或者session(保存在服务器)中。
一、cookie1、什么是cookie浏览器在访问服务器时,服务器将一些数据以 set-cookie 消息头的形式发送给浏览器。
浏览器会将这些数据保存起来。
当浏览器再次访问服务器时,会将这些数据以cookie 消息头的形式发送给服务器。
2、创建 cookiecookie的name不可以重复,和Map集合类似,当有重复的name的时候,会替代。
3、查询cookie4、cookie 保存时的编码问题cookie 的值叧能是ascii 字符,如果是中文,需要将中文转换成 ascii 字符形式。
可以使用 URLEncoder.encode()方法和 URLDecoder.decode()方法来进行这种转换。
5、cookie 的保存时间cookie.setMaxAge(int seconds);//单位为秒⎫ seconds > 0浏览器会将 cookie 以文件的方式保存在硬盘上。
在超过指定的时间以后,会删除该文件。
⎫ seconds < 0默认值,浏览器会将 cookie 保存在内存里面。
叧有当浏览器关闭以后,才会删除。
⎫ seconds = 0立即删除该 Cookie6、删除 cookie比如要删除一个 name 为”username”的 cookie。
Cookie c = new Cookie(“username”,”“);c.setMaxAge(0);cookie.setPath(request.getContextPath());//路径response.addCookie(c);7、cookie 的限制⎫ cookie 可以禁止⎫ cookie 的大小有限制(4k 左右)⎫ cookie 的数量也有限制(浏览器大约能保存 300 个)⎫ cookie 的值叧能是字符串,要考虑编码问题。
javaweb-cookiesessionjava web-cookie session1、cookieCookie 是⼀个保存在客户机中的简单的⽂本⽂件, 这个⽂件与特定的 Web ⽂档关联在⼀起, 保存了该客户机访问这个Web ⽂档时的信息, 当客户机再次访问这个 Web ⽂档时这些信息可供该⽂档使⽤。
由于“Cookie”具有可以保存在客户机上的神奇特性, 因此它可以帮助我们实现记录⽤户个⼈信息的功能, ⽽这⼀切都不必使⽤复杂的CGI等程序。
Cookie是⼀段不超过4KB的⼩型⽂本数据,由⼀个名称(Name)、⼀个值(Value)和其它⼏个⽤于控制Cookie有效期、安全性、使⽤范围的可选属性组成。
下⾯编写CookieServlet测试简单的cookie属性:package com.zx.demo;import jakarta.servlet.ServletException;import jakarta.servlet.http.Cookie;import jakarta.servlet.http.HttpServlet;import jakarta.servlet.http.HttpServletRequest;import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;public class CookieServlet extends HttpServlet {private static final String COOKIE_KEY_COUNT = "COOKIE_KEY_COUNT";@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//处理中⽂乱码resp.addHeader("content-type", "text/html;charset=utf-8");Cookie cookie = null;Cookie[] cookies = req.getCookies();for (Cookie c : cookies) {if (c.getName().equals(COOKIE_KEY_COUNT)) {cookie = c;}}if (cookie == null) {resp.getWriter().write("没有cookie");cookie = new Cookie(COOKIE_KEY_COUNT, 2 + "");} else {resp.getWriter().write("有cookie:<br/> " + cookie.getValue());}//cookie值-1int cookieValue = Integer.parseInt(cookie.getValue()) - 1;cookie.setValue(cookieValue+"");if (cookieValue <= 0) {//设置有效期为0-清除cookiecookie.setMaxAge(0);}resp.addCookie(cookie);}}配置web.xml,添加cookie servlet:运⾏程序,⾸次启动浏览器时,请求头中没有cookie,Java中会在响应头中设置⼀个值为1的cookie给客户端,下次刷新请求时将在请求header中请求到服务端。
session 和cookie 使用方法Session和Cookie是Web开发中常用的两种技术,它们用于在客户端和服务器之间传递数据。
在本文中,我们将介绍它们的基本概念和使用方法。
1. SessionSession 是一种服务器端的技术,用于在客户端和服务器之间保持状态。
它的工作原理是,服务器在客户端第一次访问网站时创建一个 session ID,并将其存储在客户端的 Cookie 中。
客户端每次发送请求时,都会将 session ID 作为参数发送给服务器,服务器据此可以判断客户端的身份和状态。
使用 Session 的步骤如下:1. 在服务器上创建一个 session 对象。
2. 将需要保存的数据存储到 session 对象中。
3. 将 session ID 发送到客户端的 Cookie 中。
4. 在客户端发出请求时,将 session ID 作为参数发送给服务器。
5. 在服务器上读取 session ID,并根据其查找对应的 session 对象。
6. 从 session 对象中读取需要的数据。
2. CookieCookie 是一种客户端的技术,用于在客户端和服务器之间传递数据。
它的工作原理是,服务器在响应客户端请求时,将需要传递的数据存储在 Cookie 中,并将其发送给客户端。
客户端在以后的请求中,会将 Cookie 作为参数发送给服务器。
使用 Cookie 的步骤如下:1. 在服务器上创建一个 Cookie 对象。
2. 将需要保存的数据存储到 Cookie 对象中。
3. 将 Cookie 对象发送到客户端。
4. 在客户端发出请求时,将 Cookie 作为参数发送给服务器。
5. 在服务器上读取 Cookie,并解析其中的数据。
6. 从 Cookie 中读取需要的数据。
总结Session 和 Cookie 都是在客户端和服务器之间传递数据的技术,但它们的实现方式不同。
Session 是一种服务器端的技术,用于在客户端和服务器之间保持状态;Cookie 是一种客户端的技术,用于在客户端和服务器之间传递数据。
java获取cookie的方法近年来,随着互联网技术的不断发展,Cookie在Web开发中变得越来越重要,到目前为止,我们使用Cookie来存储用户会话信息、记住用户上次访问的页面和设置用户首选项等,本文将阐释如何使用Java来获取Cookie。
什么是Cookie?Cookie是由网站服务器在浏览器上存储的文本文件,它能帮助浏览器记住您的一些信息,比如一次登录时用户名或其他设置。
Cookie是由Session ID来跟踪会话,它有助于实现类似网页会话的功能。
Java中获取cookies的方法要在Java中获取cookies,首先需要导入必要的包:import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;接下来,我们需要获取HttpServletRequest实例,该实例包含Cookie数组。
接下来,可以呼叫HttpServletRequest实例的getCookies()方法来获取Cookie数组:Cookie[] cookies = request.getCookies();现在,我们可以遍历Cookie数组,然后使用Cookie对象的getName()方法来获取Cookie的名称,然后使用Cookie对象的getValue()方法来获取其值:for(Cookie cookie : cookies){String name = cookie.getName();String value = cookie.getValue();// do something with these cookie name and value}最后,可以使用Cookie对象的getMaxAge()方法来获取Cookie 存活的最大时间:int maxAge = cookie.getMaxAge();使用getMaxAge()方法可以检查这个Cookie是否为会话(session)Cookie。
session对象用于在会话范围内,记录每个客户端的访问状态,以便于跟踪每个客户端的操作状态。
在会话中存储的信息,在浏览器发出后续请求时可以获取这些会话的有效数据。
在jsp页面中可以直接使用session对象,也可以通过pageContext.getSession ()或request.getSession()方法重新获取session对象。
session对象可以保存用户的登录信息,实现购物车功能等。
HTTP协议是一种无状态协议。
客户向服务器发出请求request,然后服务器返回响应response,连接就被关闭了。
在服务器端不保留连接的有关信息,因此当下一次连接时,服务器端已没有以前的连接信息了,无法判断这一次连接和以前的连接是否属于同一个客户。
因此,必须使用会话记录有关连接的信息。
从客户打开浏览器连接到服务器,到客户关闭浏览器离开这个服务器,称做一个会话。
当客户访问服务器是,可能会反复连接这个服务器上的几个页面、反复刷新一个页面或不断地向一个页面提交信息等,服务器应当通过某种方法知道这是同一个客户,这时就需要session对象。
session的工作原理如下:
1.客户首次访问服务器的一个页面时,服务器就会为该客户分配一个session
对象,同时为该session对象指定一个唯一的ID,并且将该ID号发送到客户端并写入到cookie中,使得客户端与服务器端的session建立一一对应关系。
2.当客户继续访问服务器上的其他资源时,服务器不再为该客户分配新的session对象,直到客户端浏览器关闭、超时或调用session的invalidate()方法使其失效,客户端与服务器的会话结束。
3.当客户重新打开浏览器访问网站时,服务器会重新为客户分配一个session
对象,并重新分配sessionID。
session对象主要用于属性操作和会话管理,常用方法如下:
1.public void setAttribute(Sting name, Object value),设定指定名字的属性的值,并将它添加到session会话范围内,如果这个属性是会话范围内存在,则更改该属性的值。
2.public Object getAttribute(String name),在会话范围内获取指定名字的
属性的值,返回值类型为object,如果该属性不存在,则返回null。
3.public void removeAttribute(String name),删除指定名字的session属性,若该属性不存在,则出现异常。
4.public void invalidate(),使session失效。
可以立即使当前会话失效,原来会话中存储的所有对象都不能再被访问。
5.public String getId( ),获取当前的会话ID。
每个会话在服务器端都存在一个唯一的标示sessionID,session对象发送到浏览器的唯一数据就是sessionID,它一般存储在cookie中。
6.public void setMaxInactiveInterval(int interval),设置会话的最大持续时间,单位是秒,负数表明会话永不失效。
7.public int getMaxInActiveInterval(),获取会话的最大持续时间。
8.使用session对象的getCreationTime()和getLastAccessedTime()方法可以获取会话创建的时间和最后访问的时间,但其返回值是毫秒,一般需要使用下面的转换来获取具体日期和时间。
Date creationTime = new Date(session.getCreationTime());
Date accessedTime = new Date(session.getLastAccessedTime());
<%@ page language="java" import="java.util.*"
contentType="text/html;charset=GBK"%>
<%
String path = request.getContextPath();
String basePath =
request.getScheme()+"://"+request.getServerName()+":"+request.getServ erPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>session对象方法</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<b>
会话ID:<%=session.getId() %> <br>
是否新会话:<%=session.isNew() %><br>
设置和获取属性对象:用户名 =
<%session.setAttribute("用户名","陈宁"); %>
<%=session.getAttribute("用户名") %><br>
<%
Date creationTime = new Date(session.getCreationTime());
Date accessedTime = new Date(session.getLastAccessedTime()); %>
会话创建时间:<%=creationTime %><br>
上次访问时间:<%=accessedTime %><br>
会话持续时间(s):<%=session.getMaxInactiveInterval() %><br> <%session.setMaxInactiveInterval(12); %>
修改后的会话持续时间(s):
<%=session.getMaxInactiveInterval() %><br> <%session.invalidate(); %>
</b>
</body>
</html>。