4

今天我尝试了这种代码......登录后我用我的FF浏览器删除了所有cookie,然后我刷新了网页,我得到了NPE:P所以我一直在想有没有一种简单的方法来“恢复”或其他什么如果在客户端上手动删除了 cookie,或者在这种情况下最好的方法是什么,特别是如果有一些数据(与会话属性相关)仍在 servlet 上下文范围内?

例如,如果我在会话中有一些 id 作为

session.setAttribute("id","hello world");

...而且我有类似的代码

String userID=null;
                Cookie []cookies=req.getCookies();

                    for(Cookie cookie:cookies)
                    {
                        if(cookie.getName().equals("id")){userID=cookie.getValue();}
                    }


String id=session.getAttribute("id");
User user=((MyUsers)context.getAttribute("Users")).getUser(id);

如果我如何删除用户(以避免重复)

  • A)没有 cookie,因为它们是手动删除的
  • B) 并session.getAttribute("id");抛出 NPE?

谢谢

4

1 回答 1

0

Servlet 环境使用 URL 重写或 Cookie 来跟踪用户会话(这是 HTTP 事物)。如果您删除浏览器上的 cookie,您(很可能)最终会失去用户浏览器和您的 Web 应用程序之间的所有连接。

如果你想记住用户,你需要cookies。您得到的 NPE 只是 cookie 缺失(以及程序中缺少位)的反映。

因此,您应该检查 cookie 和/或会话是否存在(验证 NPE),如果您找不到其中任何一个,那么您将无法跟踪您的用户(并且应该将他重定向到您的登录页面 - 如果它适用)。

于 2013-11-13T22:31:02.057 回答