首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨域会话-共享购物车跨域

跨域会话-共享购物车跨域
EN

Stack Overflow用户
提问于 2010-06-02 08:56:55
回答 11查看 11.8K关注 0票数 13

我们正在用eshop (php,mysql)解决这个问题。客户端希望在两个具有共享购物车的域上拥有相同的eshop。在商店里,顾客可以在没有用户帐户的情况下购物(不能登录)。并且有一个问题,如何使共享购物车跨域。

cart中的数据存储在会话中,我们也将其存储在数据库中。但是我们不能解决跨域传输数据的问题。识别未登录用户并不是防漏洞(研究)。

例如,它应该如何工作

客户转到domainOne并将一些东西添加到购物车中。而不是domainTwo (不过,通过链接输入域地址)并向购物车中添加一些其他内容。在购物车中,他拥有来自两个域的东西(在刷新页面之后)。

你知道如何解决这个问题吗?

不起作用的是:

  • 由于客户的要求,无法重定向。
  • cookies与域相关。
  • 另一个域的set_cookie没有工作
  • 最简单的方法是只传递sessionid (存储在cookie中),但我们不知道如何完全验证如何识别未登录的用户。
  • 除了cookie之外,还有其他地方可以将数据存储在客户端吗?(可能不是)
  • 我们不能使用通过url中的params发送会话in (如果用户单击链接到另一个域)或解析标题引用程序bcs,我们不知道用户如何实现另一个域。

如果你听不懂我的话,就问我一个问题。如果您认为,在两个域上使用共享(公共)购物车的eshop是个坏主意,不要告诉我,我们知道。

谢谢你的每一个回答。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2010-06-08 20:43:58

您可以使用第三个域来识别所有域上的客户。

例如,在http://thirdDomain.com/session.php上使用一个PHP,该文件包含在两个商店的所有页面中。

示例:

代码语言:javascript
复制
<script type="text/javascript" src="http://thirdDomain.com/session.php"></script>

在您的客户切换域之后,您可以使用第三个域将他标识为同一个客户。

您可以将两个商店上的会话id分配给第三个域上的会话id,以访问两个商店的购物车。您只需要通知第三个域关于您的商店会话(即添加它们作为参数)。

根据您对代码和模板的灵活程度,您甚至可以使用来自第三个域的输出来定义您的商店中的会话id。这样,您就可以在所有域上使用相同的会话id。但是通常情况下,会话id分配应该是更安全的方式。

使用javascript版本,您还可以输出脚本,这些脚本可以将会话id添加到当前html页面中的其他域的所有传出链接和表单中。这可能是有趣的,如果您可以确定您的客户被阻止曲奇。您还可以使用javascript将现有会话通知父文档。

票数 9
EN

Stack Overflow用户

发布于 2010-06-02 09:14:17

一直有人问这个。

搜索SSO。

您需要通过域传递URL (或vai a POST)中的会话id,然后:

1)检查目标域中不存在会话

2)使用发送的会话id重新绑定会话

例如:

代码语言:javascript
复制
if ((!$_COOKIE[session_name()]) && $_GET['passed_id']) {
    if (check_session_exists($_GET['passed_id'])) { 
        session_id($_GET['passed_id']);
    }
}
session_start();
...
function check_session_exists($id)
{
   $path=session_save_path() . $id;
   if (file_exists($path) && (time()-filemtime($path)<session_cache_expire())) {
      return true;
   }
   return false;
}

这也意味着您需要添加“?passed_id=”。urlencode(session_id())指向指向另一个域的任何URL。

结果表明,C.

票数 4
EN

Stack Overflow用户

发布于 2010-06-12 08:39:40

该模式非常简单,并被广泛使用。例如,由谷歌提供的众多服务。您可以通过跟踪浏览器和各种google服务之间的HTTP交换来了解整个情况。

假设我们的客户获得了第一个域名的授权。通过进入第二个阶段,我们必须:

  1. 启动一个会话并在其中存储一些令牌。
  2. 请浏览器以某种方式请求第一个域并发送此令牌。
  3. 第一个域将识别我们的客户端,并在此令牌和用户id之间建立共享数据库中的连接。
  4. 通过再次请求第二个域,我们将授权它,因为它已经启动了会话。

唯一的问题是如何申请第一个域名。它可以是图片、JS请求或整个页面重定向。一定的选择取决于你。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2956214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档