【问题标题】:Cross Domain Session: Any thoughts on storing session id in JWT?跨域会话:关于在 JWT 中存储会话 id 有什么想法吗?
【发布时间】:2016-07-07 14:20:15
【问题描述】:

我正在开发一个 PHP API 应用程序,该应用程序将在需要共享用户会话的不同域(并托管在不同服务器上)工作。假设api.a.comapi.b.com

后端方面,对我来说,使用可以从多个域获取的 session id 密钥存储会话数据是很容易的部分。

我主要关心的是向api.a.comapi.b.com 发送session id。本机 PHP 会话使用 cookie 为每个请求发送会话 ID。拥有不同的顶级域,cookie 不会被发送到所有域(除非我明确使用 Javascript 将其提取并作为请求标头发送)。

我想过将session id存储在发送到服务器的Json Web Token数据中,但不知何故,感觉不对。

对此有什么想法吗?

【问题讨论】:

    标签: php session cross-domain jwt


    【解决方案1】:

    使用内存缓存服务器。 PHP 支持在 memcache 中保存会话。

    对于 Amazon,我有一个负载均衡器前端,带有 Linux 实例,每个实例都连接到内存缓存。

    然后我有一个完全不同的 EB 应用程序和域,它访问同一个 memcache 并提取实时统计信息,因此很容易设置从不同应用程序访问同一个 memcache 服务器或集群。

    请注意,“memcache”和“memcached”之间存在区别——两者都可以使用,但它们是不同的服务器!

    【讨论】:

    • ... 以及“至于 me” 到目前为止,我一直在使用“memcached”。 (我欢迎并且确实邀请任何可能向我建议我做出错误选择的人的有根据的意见......)
    • memcache 是我选择的应用程序中的遗留物——memcacheD 几乎完全相同,但它有一些 memcache 中缺少的功能,例如检索所有数据。你必须做几个循环和解析才能从内存缓存中获取它。
    【解决方案2】:

    使用内存缓存服务器。 PHP 支持在 memcache 或 mysql 中保存会话。 然后通过 http 传输使用 sessionid。

    `

    $sid = $_REQUEST['sid'];// 接收 sessionid

    session_start();

    session_id($sid); //通过$sid重置当前sessionid

    var_dump($_SESSION["A_DOMAIN_SESSION"]);

    var_dump($_SESSION["B_DOMAIN_SESSION"]);

    ?>`

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-12
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    相关资源
    最近更新 更多