关于cookie

关于cookie

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.mason.servlet.cookie;
 
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
/**
 * Servlet implementation class MasonLoginServlet
 */
@WebServlet("/cookies/login")
public class MasonLoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
        
    /**
     * @see HttpServlet#HttpServlet()
     */
    public MasonLoginServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
 
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("用户登录成功");
        Cookie cookie=new Cookie("user""admin");
        cookie.setMaxAge(60*60*24*7);
        response.addCookie(cookie);
        response.getWriter().println("login success");
     
    }
 
 
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package com.mason.servlet.cookie;
 
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
/**
 * Servlet implementation class MasonIndexServlet
 */
@WebServlet("/cookies/index")
public class MasonIndexServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
        
    /**
     * @see HttpServlet#HttpServlet()
     */
    public MasonIndexServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
 
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie[] cs=request.getCookies();
        String user=null;
        if(cs==null) {
            response.getWriter().println("user not login");
            return;
        }
        for (Cookie cookie : cs) {
            System.out.println(cookie.getName()+"..."+cookie.getValue());
            if(cookie.getName().equals("user")) {
                user=cookie.getValue();
                break;
            }
        }
        if(user==null) {
            response.getWriter().println("user not login");
        }else {
            response.getWriter().println("user :"+user);
        }
     
    }
 
}

我的思路是这样的:

MasonLoginServlet这个servlet设置了一个cookie返回给了浏览器本地,然后MasonIndexServlet中有Cookie[] cs=request.getCookies();这行代码来获取浏览器本地所有的cookie,包括其他网站保存下来的cookie,这样的话,就算MasonLoginServlet中设置的cookie被销毁了,MasonIndexServlet也不至于不能读取到别的网站的cookie,那为什么会空指针异常呢?

请老师解答一下,看下是不是我的思路有问题?谢谢老师!

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
慕布斯645313 2019-03-27 19:00:53

哥们你看一下这个博客,https://blog.csdn.net/qq_32331073/article/details/80365871,写的很明白。

  • 提问者 MasonM #1
    非常谢谢你!
    2019-03-27 19:09:34
提问者 MasonM 2019-03-27 13:57:56

 1:sessionid是保存在cookie中的,每次请求之后服务器会从cookie中查找sessionid来判断是否为同一个浏览器窗口,是这样吗? 

2:如果保存sessionid的那个cookie被销毁了,那在cookie中的sessionid也自然没了,那服务器上对应的session区域是在默认的30分钟后就自动销毁吗? 

3:这是否意味着,session要依赖cookie来使用?

 4:cookie是不是由服务器创建,绑定在一个请求上,返回给浏览器本地的?

 5:如果只创建了session,是不是服务器会默认生成cookie来存储sessionid并返回给浏览器?

  • 1、同学的理解是正确的。2、是的,session自动销毁的时间是30分钟。3、在实际的开发中,默认登录一般都是cookie和session一起使用的,session还有存储其他数据的作用。4、是的,同学理解的是正确的。5、cookie是需要同学使用response对象来返回给浏览器的,譬如response.addCookie(cookie);这段代码,祝学习愉快~
    2019-03-27 17:02:31
  • 提问者 MasonM 回复 chrismorgen #2
    老师那我关于第五个问题还有一点小疑惑:如果我在服务器只创建了session,但没有创建cookie,那浏览器怎样去获取包含sessionid的cookie呢?如果没有的话,之后再次发送请求的话,服务器就无法获取到带有sessionid的cookie了呀?
    2019-03-27 18:16:37
chrismorgen 2019-03-27 13:51:15

你好同学,你的思路是正确的,请问同学是否还在纠结判断cs是否为null这个问题吗?如果是,这里只是做了一个保险措施,同学不写也是可以的,祝学习愉快~

  • 提问者 MasonM #1
    好的谢谢老师,我还想问下一些其他问题,我在新的我要回答中把问题提出,请老师解答一下,非常感谢!!!
    2019-03-27 13:56:16
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10204    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师
插入代码