Java 如何在JSP中更新现有cookie?
我有一个cookie,Java 如何在JSP中更新现有cookie?,java,jsp,cookies,Java,Jsp,Cookies,我有一个cookie,mycokie,它包含一个散列值。此cookie设置为一年后过期,路径为“/”。我需要用一个新的哈希值更新这个cookie。加载JSP脚本后,我检索cookie,如下所示: Cookie[] cookies = request.getCookies(); Cookie myCookie = null; for (int i = 0; i < cookies.length; i += 1) { if (cookies[i].getName().equals("my
mycokie
,它包含一个散列值。此cookie设置为一年后过期,路径为“/”。我需要用一个新的哈希值更新这个cookie。加载JSP脚本后,我检索cookie,如下所示:
Cookie[] cookies = request.getCookies();
Cookie myCookie = null;
for (int i = 0; i < cookies.length; i += 1) {
if (cookies[i].getName().equals("myCookie")) {
myCookie = cookies[i];
break;
}
}
检查结果后,我现在有两个myookie的实例:具有正确过期日期和路径的原始版本,以及旧的无效值;以及一个名为“mycokie”的新cookie,该cookie在会话结束时过期,具有正确的值和JSP文档的路径
如果我这样做:
myCookie.setValue("my new value");
myCookie.setPath(myCookie.getPath());
myCookie.setMaxAge(myCookie.getMaxAge());
response.addCookies(myCookie);
同样的事情也会发生。我得到两个具有相同名称和不同属性的cookie
Cookie对象是否不保留检索时的属性?如何更新此cookie
注意:我不想修改路径或过期日期。我只想更新已设置的cookie的值。如果新cookie不包含相同的名称、路径和域,则可以删除旧cookie,方法是将MaxAge设置为(0))根据的第3.3.4节,用户代理在发送到服务器的cookie标头中不包含过期信息。因此,无法更新现有cookie的值,同时保留最初仅基于与cookie关联的信息设置的过期日期
因此,这个问题的答案是:您不能这样做。如果您在JSP中操作cookie,您需要注意的一件事是响应是否已经提交。一旦内容写入输出流,向响应中添加cookie是徒劳的 只需设置路径,例如:
cookie.setPath("/");
这将覆盖旧的cookie值。def member=SecUser.get(userService.currentUser().id)
def member = SecUser.get(userService.currentUser().id)
def cookies = request.getCookies()
def cookie;
def sum = 0;
def cookieSum = 0;
def cookieItems;
for(def i=0; i<cookies.size(); i++){
if (cookies[i].name == 'c17'){
cookie = cookies[i]
cookieItems = cookie.value.split('-')
println "cookieItems......."+cookieItems
if(params.itemId != null){
for(def j=0; j<cookieItems.size(); j++){
def oldItem = cookieItems[j].split('\\|')[0]
if(params.itemId != oldItem){
sum = sum + 1
}
}//Below code for Update your cookie value
if(sum == cookieItems.size()){
cookie.value = cookie.value +"-"+params.itemId+"|"+member.id
def b = cookie.value
cookie.setValue(b);
response.addCookie(cookie);
}
}
break
}
else{
cookieSum = cookieSum + 1
}
}
if ((cookieSum) == cookies.size()){
// Here ADD new cookie........
def a = params.itemId+"|"+member.id
cookie = new Cookie('c17',a.toString())
cookie.path = '/'
response.addCookie(cookie)
}
def cookies=request.getCookies()
def曲奇;
def sum=0;
def-cookieSum=0;
def Cookie项目;
对于(defi=0;我看了一下:@Ralph,这对我有什么帮助?你的域和路径相同吗?也看这里)谢谢。我不会在发送任何内容后添加cookie。我的所有cookie验证都是在将任何内容发送到客户端之前完成的。1)查看接受的答案,了解无法更新现有cookie的原因。2) 您的代码绝对不是JSP。3) 您的代码显然是特定于您的应用程序的(SecUser?这是从哪里来的,它与这个问题有什么关系?)
def member = SecUser.get(userService.currentUser().id)
def cookies = request.getCookies()
def cookie;
def sum = 0;
def cookieSum = 0;
def cookieItems;
for(def i=0; i<cookies.size(); i++){
if (cookies[i].name == 'c17'){
cookie = cookies[i]
cookieItems = cookie.value.split('-')
println "cookieItems......."+cookieItems
if(params.itemId != null){
for(def j=0; j<cookieItems.size(); j++){
def oldItem = cookieItems[j].split('\\|')[0]
if(params.itemId != oldItem){
sum = sum + 1
}
}//Below code for Update your cookie value
if(sum == cookieItems.size()){
cookie.value = cookie.value +"-"+params.itemId+"|"+member.id
def b = cookie.value
cookie.setValue(b);
response.addCookie(cookie);
}
}
break
}
else{
cookieSum = cookieSum + 1
}
}
if ((cookieSum) == cookies.size()){
// Here ADD new cookie........
def a = params.itemId+"|"+member.id
cookie = new Cookie('c17',a.toString())
cookie.path = '/'
response.addCookie(cookie)
}