Servlet中Cookie增、删、改、查的例子

整理了一个在Servlet中对Cookie增删改查的工具类,首先要注意的是在服务器端是无法对Cookie做修改的,只能做到覆盖创建。

引用StackOverflow上James Sumners的 回答 :

Per section 3.3.4 of RFC 2965 , the user agent does not include the expiration information in the cookie header that is sent to the server. Therefore, there is no way to update an existing cookie’s value while retaining the expiration date that was initially set based solely on the information associated with the cookie.

So the answer to this question is: you can’t do that.

工具类如下:

packagecom.demo.util;

importjava.io.UnsupportedEncodingException;
importjava.net.URLDecoder;
importjava.net.URLEncoder;

importjavax.servlet.http.Cookie;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;

publicclassCookieUtils{

/**
 * 新增Cookie
 * @paramresponse
 * @paramname
 * @paramvalue
 */
publicstaticvoidaddCookie(HttpServletResponse response, String name,String value){
try{
//特殊字符需要编码
 Cookie cookie = newCookie(name,URLEncoder.encode(value,"UTF-8"));
 cookie.setMaxAge(60*60*24*7);//- 单位为秒,7天有效
 cookie.setPath("/");//- 根路径
//JavaEE5兼容
try{
 cookie.setHttpOnly(true);//- 防XSS
 }catch(NoSuchMethodError e) {
 e.printStackTrace();
 }
 response.addCookie(cookie);
 } catch(UnsupportedEncodingException e) {
// TODO Auto-generated catch block
 e.printStackTrace();
 }
 }

/**
 * 删除Cookie
 * @paramrequest
 * @paramresponse
 * @paramname
 * @return
 */
publicstaticbooleandeleteCookie(HttpServletRequest request,HttpServletResponse response, String name){
if(request.getCookies() !=null) {
for(Cookie cookie : request.getCookies()) {
if(cookie.getName().equals(name)) {
 cookie.setMaxAge(0);
//经测试发现还需设置如下两个值,之所以这样,原理为覆盖掉Cookie,而不是常规意义中的删除
 cookie.setValue("");
 cookie.setPath("/");
 response.addCookie(cookie);
returntrue;
 }
 }
 }

returnfalse;
 }

/**
 * 覆盖掉之前的cookie
 * @paramrequest
 * @paramname
 * @paramvalue
 */
publicstaticvoidoverrideCookie(HttpServletRequest request,HttpServletResponse response, String name,String value){
if(request.getCookies() !=null) {
for(Cookie cookie : request.getCookies()) {
if(cookie.getName().equals(name)) {
 cookie.setValue(value);
 cookie.setPath("/");
//cookie.getMaxAge()为-1,服务器端无法获取MaxAge
 cookie.setMaxAge(60*60*24*7);
 response.addCookie(cookie);
 }
 }
 }
 }

/**
 * 获取Cookie
 * @paramrequest
 * @paramname
 * @return
 */
publicstaticCookiegetCookie(HttpServletRequest request, String name){
if(request.getCookies() !=null) {
for(Cookie cookie : request.getCookies()) {
if(cookie.getName().equals(name)) {
returncookie;
 }
 }
 }

returnnull;
 }
/**
 * 获取Cookie对应的值
 * @paramrequest
 * @paramname
 * @return
 */
publicstaticStringgetCookieValue(HttpServletRequest request, String name){
if(request.getCookies() !=null) {
for(Cookie cookie : request.getCookies()) {
if(cookie.getName().equals(name)) {
try{
returnURLDecoder.decode(cookie.getValue(),"UTF-8");
 } catch(UnsupportedEncodingException e) {
// TODO Auto-generated catch block
 e.printStackTrace();
returnnull;
 }
 }
 }
 }
returnnull;
 }
}

时间: 2024-07-30 12:34:00

Servlet中Cookie增、删、改、查的例子的相关文章

简单的php数据库操作类代码(增,删,改,查)_php实例

数据库操纵基本流程为: 1.连接数据库服务器 2.选择数据库 3.执行SQL语句 4.处理结果集 5.打印操作信息 其中用到的相关函数有 •resource mysql_connect ( [string server [, string username [, string password [, bool new_link [, int client_flags]]]]] ) 连接数据库服务器•resource mysql_pconnect ( [string server [, strin

Struts2实现CRUD(增 删 改 查)功能实例代码_java

CRUD是Create(创建).Read(读取).Update(更新)和Delete(删除)的缩写,它是普通应用程序的缩影.如果您掌握了某框架的CRUD编写,那么意味可以使用该框架创建普通应用程序了,所以大家使用新框架开发OLTP(Online Transaction Processing)应用程序时,首先会研究一下如何编写CRUD.这类似于大家在学习新编程语言时喜欢编写"Hello World". 本文旨在讲述Struts 2上的CRUD开发,所以为了例子的简单易懂,我不会花时间在数

简单的增 删 改 查

一:insert语句into 关键字是可选的values关键字前面的()是可选的,这里是要接收数据的列values后面,有两种方式提供值1:显式的给出值  2:从select语句中导出值 insert语句注意几点1:不要理标志列,系统会给你插入的2:给出实际的值,如果没有,那就null3:给出默认的值,default关键字,告诉数据库取默认值 insert into ... select什么时候会这么用,当成批的数据来自1:数据库中的另一个表2:同一台服务器完全不同的数据库3:另一个SQLSER

全面了解servlet中cookie的使用方法_java

---恢复内容开始--- Cookie是存储在客户端计算机上的文本文件,并保留了它们的各种信息跟踪的目的. Java Servlet透明支持HTTP Cookie. 涉及标识返回用户有三个步骤: • 服务器脚本发送到浏览器的一组cookie.对于如: 姓名,年龄,或识别号码等. • 浏览器将这些信息存储在本地计算机上,以备将来使用. • 下一次浏览器发送任何请求,Web服务器,然后这些cookie发送信息到服务器,服务器将使用这些信息来识别用户. 以下是有用的方法列表时,可以使用servlet操

oracle监控某表变动触发器例子(监控增,删,改)_oracle

使用oracle触发器 实现对某个表的增改删的监控操作,并记录到另一个表中. 代码: 复制代码 代码如下: create or replace trigger test_trigger    before insert or update or delete on test_table    for each row  declare    v_id        varchar2(30);    v_bdlb      varchar2(1);    v_jgdm      VARCHAR2(

Lucene能否像数据库那样对已存放记录的索引文件的某字段进行增/删/改?

问题描述 比如现在的索引文件中的字段是articleid.title.content.create_date.userid,并且已经索引了10000个记录.我现在需要将其中的userid字段删除掉,将date字段重命名为last_modify,同时增加一个visit_count字段.请问Lucene是否支持这样的操作呢? 解决方案 据我所知不能,都不能不过你可以试试引用通过读取index文件,然后遍历所有的doc,获取所有的field,然后添加到你新的doc里面,然后重新写入index文件因为我

使用DataTable更新数据库(增,删,改)_实用技巧

1.修改数据 复制代码 代码如下:             DataRow dr = hRDataSet.Tables["emp"].Rows.Find(textBox3.Text);            //DataRow dr = hRDataSet.Tables["emp"].Select("id="+textBox3.Text)[0];            dr.BeginEdit();            dr["nam

JS操作图片(增,删,改) 例子_javascript技巧

复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>    <title></titl

C#中的 增 、删、 改、 查功能

C#中的 增 .删. 改. 查功能 以下是各大板块的功能  有注释... /// <summary> ­ /// 对话框返回值 ­ /// ­ ///这是一个退出按键的方法,用来确定用户是否真的要退出 ­ /// </summary> ­         private void 退出ToolStripMenuItem_Click(object sender, EventArgs e) ­         { ­             //定义 DialogResult 变量 用