高流量 Web 应用程序中用户会话的良好替代方案?

发布于 2024-10-16 03:48:53 字数 227 浏览 1 评论 0 原文

在以下场景中,什么是好的/可扩展的用户会话替代方案:

  • 用户不必启用 cookie
  • URL 查询字符串限制为 255 个字符
  • 大量 GET 请求(无隐藏表单字段)
  • 应用程序在多个服务器(网络场)上运行
  • 一些用户通过代理(相同 IP)连接
  • 用户通过 HTTPS 连接
  • 50 000 个并发用户

What would be good/scalable user session alternative in following scenario:

  • users don't have to have cookies enabled
  • URL query string restriction of 255 characters is imposed
  • lot of GET requests (no hidden form fields)
  • application runs on several servers (web farm)
  • some users connect over proxy (same IP)
  • users connect over HTTPS
  • 50 000 concurrent users

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

自由如风 2024-10-23 03:48:53

如果您可以保证客户端始终连接到同一 Web 服务器,则可以使用 SSL ID 作为简单的会话跟踪机制。某些 Web 服务器公开此功能,并在不支持 cookie 时自动使用它进行会话跟踪。

无论如何,唯一可行的解​​决方案是在 URL 本身中包含会话 ID。向 URL 添加参数是最简单的方法,但 ID 可以嵌入 URL 中的任何位置,即作为路径的一部分。您可以使用此 ID 从数据库中获取有关用户的信息。

当然,您会遇到常见的问题,如 ID 欺骗和会话数据库成为瓶颈。

If you can guarantee that the client always connects to the same web server, you can use the SSL ID as a simple session tracking mechanism. Some web servers expose this capability and automatically use it for session tracking when cookies aren't supported.

The only solution that will work no matter what is to include a session ID in the URL itself. Adding a parameter to the URL is the simplest way to do this, but the ID can be embedded anywhere in the URL, i.e. as part of the path. You would use this ID to fish information about the user out of a database.

You will run into the usual problems, of course, with ID spoofing and having the session database be a bottleneck.

兮子 2024-10-23 03:48:53

首先,恕我直言,除了会话之外没有好的替代方案。问题是当cookies被禁用时你如何获取它。答案是使用 URL 参数。因此,您必须将会话 ID 附加到每个请求(包括链接和表单)。所有其他要求并不真正相关。使您的逻辑无状态,这样您就不会遇到可扩展性问题:所有请求都应通过负载均衡器到达您的逻辑,因此您可以根据需要添加任意数量的服务器。

First, IMHO, there is no good alternative to session. The question is how do you obtain it when cookies are disabled. The answer is using URL parameter. So, you have to append session id to each request (including links and forms). All other requirements are not really relevant. Make your logic stateless, so you do not have scalability problems: all requests should arrive to your logic via load ballancer, so you can add as many servers as you want.

飘落散花 2024-10-23 03:48:53

也许是 URL 重写 或某些 URI 缩短机制,例如 http://tinyurl.comhttp://goo.gl 所以您可以在 255 个字符以内传递会话详细信息。
注意:不推荐使用这些服务,而是推荐使用该机制。

Maybe URL Rewriting or some URI shortening mechanism like http://tinyurl.com or http://goo.gl so you can pass your session details well under 255 chars.
Note: Not recommending to use these services but the mechanism.

纸伞微斜 2024-10-23 03:48:53

首先,你的要求非常严格。
我看到的唯一选择是使用这样的方法: http://code.google.com/p/ seaside/

简而言之:您的系统将生成无状态网址,例如
http://host/app/@123445568978
然后您将继续在数据库上获取会话对象。

First of all, your requirements are very tight.
The only option I see is using an approach like this: http://code.google.com/p/seaside/

In short: your system will generate statless urls like
http://host/app/@123445568978
Then you will go on the db to get the session object.

以酷 2024-10-23 03:48:53

5万用户在做什么?连续拖放位置更新到服务器或每 15 分钟单击一个文本链接?在最后一种情况下:将所有内容移动到具有大量内存的单个服务器上。

50000 users doing what? Continuous drag-and-drop with position updates to the server or clicking a text link every 15 minutes? In the last case: move everything onto a single server with a lot of ram.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文