4

使用 MySQL 在 C++ 服务器中处理会话和超时的最佳实践是什么。

我的 C++ 服务器生成一个会话 GUID 并将其作为 Set-Cookie 发送到客户端浏览器。

我应该超时任何会话吗?

我应该将会话 GUID 保存在我的 MySQL 用户表中吗?

当用户做某事时,我应该更新表中的任何时间戳还是应该将会话和上次操作直接保存在 C++ 服务器中?

我应该如何处理“保持登录”,永不过期的会话 GUID?(这可能是一个很大的安全漏洞)

4

1 回答 1

1

我无法在 C++ 部分为您提供帮助,但这里有一些关于会话(服务器端)的指示:

  • Session 对象至少应该保持

    • 上次访问的时间(发出请求)
    • 每次访问时计算的过期时间,方法是将当前时间添加到 Max Idle Time(在会话被视为过期之前没有进行访问的最长时间)
  • 在每次访问时,将存储在 Session 对象中的到期时间与当前时间进行比较,以确定会话是否到期。如果是这种情况,则会话无效并且会话对象从会话管理器的缓存中删除。在 Web 服务器的情况下,将 302 发送回客户端并且 cookie 已过期。

  • 会话管理器可以实现一个会话缓存,它要么在内存中,要么保存在磁盘上。将其持久化到磁盘可在服务器重新启动的情况下提供会话恢复。缓存还可以是分布式缓存(例如 Memcache),它允许集群中的多个服务器共享 Sessions 对象并提供跨服务器的负载平衡。

于 2013-03-28T08:55:22.323 回答