【问题标题】:Cookies,Session in Java - Web AppCookies,Java 中的会话 - Web 应用程序
【发布时间】:2013-02-06 10:42:21
【问题描述】:

我在理解 Java Web 应用程序中的 cookie、会话和身份验证时遇到了一点问题。

基本上我有一个身份验证类,我的 servlet 向其提供请求对象,它负责根据用户是否登录返回真或假。

所以,每次用户登录时,我都会创建一个大的随机字符串,并将其作为值赋给 response.cookie 并作为属性赋给会话对象,对吗?当那个用户发出其他请求时,我会将他刚刚发送给我的cookie与他的会话的cookie进行比较,看看是否相同,然后他将被认证,对吧?

也许我在这里说错话了,所以如果用户的身份验证是上述过程或者我哪里弄错了,我希望有人解释我。

谢谢

【问题讨论】:

    标签: java session authentication cookies


    【解决方案1】:

    要么有一个安全框架(如 JAAS)来处理它,要么将数据存储在会话中。将其存储在 cookie 中非常不安全,并且容易受到各种攻击。看到这个similar question

    Cookies 存储在客户端,会话在服务器中进行管理,因此更加安全。使用 JAAS 或其他框架将为您提供更复杂的身份验证/授权选项。

    【讨论】:

    • 我不允许使用框架。那么我可以在会话对象中有一个布尔变量,如果用户登录,它将在每个请求中告诉我?技术好不好?
    【解决方案2】:

    一种简单的方法是在用户通过身份验证时在会话(或用户对象本身)中设置一个标志。您不必对 cookie 做任何事情 - 让容器管理使用 cookie 维护您的会话。你只关心会话本身。

    为了提高效率,您对代码进行了优化,以便在用户登录之前不创建会话。但是您可能无法存储尚未登录的用户的其他信息(例如购物车内容)。已登录。节省的少量内存不值得额外的麻烦。

    我建议使用框架 - JAAS 过于抽象/复杂。使用类似Shiro

    【讨论】:

    • 就这样吗?只是一面旗帜?不是饼干?那安全吗?所以这种方法最适合保持用户登录?
    • 是的。应用服务器会将会话 ID 写入 cookie 并使用它将正确的会话实例关联到正在处理用户的 http 请求的线程。会话数据不能被最终用户篡改,但 cookie 肯定可以。会话仅保留在服务器上。它永远不会发送给客户端。
    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 2019-06-23
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多