在jsp或java中怎么存取cookie值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在jsp或java中怎么存取cookie值相关的知识,希望对你有一定的参考价值。

Cookie []cookies=request.getCookies();
String cookieName="myCookie";
Cookie myCookie=null;
for(int i=0;i<cookies.length;i++) 
if(cookies[i].getName.equals(cookieName)) 
  myCookie=cookie[i];
  break;
 


以上是详细代码,只能这样来获取cookie;

String cookieName="myCookie";
String cookieValue="cookieValue";
Cookie myCookie=new Cookie(cookiename,(Object)cookieValue);
myCookie.setmaxAge(60*60*24);//一天
respose.addCookie(myCookie);

以上是存一个Cookie

参考技术A cookie是存放在客户端的信息
$.cookie('cookieName', 'cookieValue') //存入值
$.cookie("cookieName")//取出值

在java中获取cookie值

【中文标题】在java中获取cookie值【英文标题】:Get cookie value in java 【发布时间】:2014-05-13 07:41:34 【问题描述】:

我已经在我的 JSP 中像这样初始化了 Cooke,

String timeStamp = new SimpleDateFormat("dd:MM:yyyy_HH:mm:ss:SSS").format(Calendar.getInstance().getTime());
timeStamp = timeStamp + ":" + System.nanoTime();
String loc = "/u/poolla/workspace/FirstServlet/WebContent/WEB-INF/"+timeStamp;
Cookie thecookie = new Cookie("thecookie", loc);
thecookie.setMaxAge(60*60*24);
response.addCookie(thecookie);

因此,所有创建的 cookie 将具有相同的名称,但不同的用户访问时间的值不同。

在 java servlet 的结尾,我想停用/杀死在 java servlet 开头传递的 cookie,并说如果他们是 5 个用户并行使用系统,我将如何知道要为哪个用户停用哪个 cookie在 my.java 的最后一个?

例如,考虑

User 1 : cookie name `thecookie` value `AAA`
User 2 : cookie name `thecookie` value `BBB`
User 3 : cookie name `thecookie` value `CCC`
User 4 : cookie name `thecookie` value `DDD`
User 5 : cookie name `thecookie` value `EEE`

现在,在 my.java servlet 的末尾,我想停用在 my.java 开头分配的值为 CCC 的 cookie,而不干扰其他 cookie 值,该怎么做?

【问题讨论】:

你的第二个问题不清楚。 在我的编辑中解释。 Web 应用程序已经是多线程的。你为什么认为它会为 10 个用户显示 10 个 cookie? 我没听懂,我刚开始使用 cookie Getting cookie in servlet的可能重复 【参考方案1】:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException 

    String username = "";
    String password = "";
    // Get an array of Cookies associated with this domain
    Cookie[] cookies = request.getCookies();
    if (cookies != null) 
        for (int i = 0; i < cookies.length; i++) 
            if (cookies[i].getName().equals("username")) 
                username = cookies[i].getValue();
            
            if (cookies[i].getName().equals("password")) 
                password = cookies[i].getValue();
            
        
    
    AccountDAO l = new AccountDAO();
    Account a = l.getAll(username, password);
    if (a != null) 
        request.getRequestDispatcher("Detail.jsp").forward(request, response);
       
     else 
        request.getRequestDispatcher("login.jsp").forward(request, response);
    

【讨论】:

【参考方案2】:
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException 
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    HttpSession session = request.getSession();

    AccountDAO db = new AccountDAO();
    Account ac = (Account) db.getAll(username, password);

    if (ac != null) 
        String remember = request.getParameter("remember");
        if (remember != null) 
            Cookie c_user = new Cookie("username", username);
            Cookie c_pass = new Cookie("password", password);

            c_user.setMaxAge(3600 * 24 * 30);
            c_pass.setMaxAge(3600 * 24 * 30);

            response.addCookie(c_user);
            response.addCookie(c_pass);

            session.setAttribute("display_name", ac.getDisplayName());
            request.getRequestDispatcher("Detail.jsp").forward(request, response);
         else 
            session.setAttribute("display_name", ac.getDisplayName());
            request.getRequestDispatcher("Detail.jsp").forward(request, response);
        
     else 
        request.getRequestDispatcher("login.jsp").forward(request, response);
    

【讨论】:

【参考方案3】:

在 kotlin 中会更短:

fun HttpServletRequest.getCookie( name: String) = cookies.firstOrNull  it.name == name 

【讨论】:

【参考方案4】:

准备使用泛型方法:

public static Cookie getCookie(HttpServletRequest request, String name) 
    Cookie[] cookies = request.getCookies();
    if (cookies != null) 
        for (Cookie cookie : cookies) 
            if (cookie.getName().equals(name)) 
                return cookie;
            
        
    
    return null;

【讨论】:

【参考方案5】:
Cookie[] cookies = request.getCookies();
int i = 0;
for (Cookie cookie : cookies ) 

  Sytem.out.println(cookies[i].getName());
  Sytem.out.println(cookies[i].getValue());

  i++;

【讨论】:

【参考方案6】:

您使用了错误的方法来读取 cookie..

Cookie[] cookies = request.getCookies();

if (cookies != null) 
 for (Cookie cookie : cookies) 
   if (cookie.getName().equals("cookieName")) 
     //do something
     //value can be retrieved using #cookie.getValue()
    
  

使用这个。无需检测特定用户的 cookie,只需将其停用即可。

【讨论】:

您的意思是它会自动识别要停用的cookie?? 我无法在此方法中读取与字符串关联的特殊字符或数字?有什么限制吗? 为高评价答案添加了 java 8:Arrays.stream(request.getCookies()).filter(t -> "cookieName".equals(t.getName())).findFirst() .get() 这个答案中的request 是什么?如何定义? @Kavipriya request 指的是HttpServletRequest

以上是关于在jsp或java中怎么存取cookie值的主要内容,如果未能解决你的问题,请参考以下文章

JSP之Cookie

关于Cookie存取中文出现乱码问题

Django基于PythonWeb的Django框架设计实现天天生鲜系统-6Django中Cookie存取

Cookie对象

winform 中怎么存cookie的值

js文件Cookie存取值的使用