【问题标题】:How to identify website visitor when cookies disabled and URL rewriting is not allowed?禁用 cookie 且不允许 URL 重写时如何识别网站访问者?
【发布时间】:2011-07-23 20:37:41
【问题描述】:

在 Java Web 应用程序中,Java servlet 创建唯一的 jsessionid,它作为 cookie 传递给客户端浏览器,以跟踪客户端在第一个请求之后的后续请求。但是当由于安全策略而禁用 cookie 并且不允许 URL 重写时,我的理解是 Java servlet 将为来自同一客户端的每个请求创建一个新的会话对象。它是否正确?这是否意味着大量的服务器内存浪费(为每个永远不会再次使用的会话对象分配过多的内存以及过多的垃圾回收)?

在这种情况下使用的一种解决方案是使用客户端的IP地址和用户代理字符串来唯一标识用户并存储在数据库中。这是正确的解决方案吗?

上述情况在搜索引擎机器人的情况下相当常见,它们在访问网站时通常会发出数千个频繁的请求。

对于为基于 Java 的 Web 应用程序设计适当的解决方案来解决这个问题还有其他想法吗?

【问题讨论】:

    标签: java cookies webserver


    【解决方案1】:

    是的,在这种情况下,每次都会创建会话。这些确实会消耗内存,并且最终需要进行 GC。

    如果您不需要跟踪用户,您可以随时选择禁用会话的创建。在 JSP 中这有点困难,因为一个页面通常总是创建一个会话。不过有一个指令可以关闭它。

    但是,您可以编写一个过滤器和 servlet 请求包装器来阻止创建会话。

    在 JSF 中,经常使用的 Mojorra 2.04 实现中存在一个非常不幸的错误,它或多或少不可能做到这一点,但幸运的是 Mojarra 2.1.0 已修复此问题。

    如果您确实需要跟踪用户,可以使用一种指纹识别形式。不过,这始终是近似值,我认为您不应该将其用于登录。 IP + 用户代理是一种指纹识别形式,但由于代理和大型组织为其所有工作站安装完全相同的浏览器,这非常不可靠。使用情况统计可以,但完全不适合登录。

    替代方案正在使用 HTTPS/SSL,因为该协议具有内置类型的“会话 ID”,或者使用 DOM 或 Flash 存储,并非所有禁用 cookie 的人也会禁用。

    【讨论】:

    • 好答案。不过我要强调一点:您无法通过 IP + USER_AGENT 识别某人。
    猜你喜欢
    • 2014-10-22
    • 1970-01-01
    • 2019-04-02
    • 2021-04-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    相关资源
    最近更新 更多