我们正在用eshop (php,mysql)解决这个问题。客户端希望在两个具有共享购物车的域上拥有相同的eshop。在商店里,顾客可以在没有用户帐户的情况下购物(不能登录)。并且有一个问题,如何使共享购物车跨域。
cart中的数据存储在会话中,我们也将其存储在数据库中。但是我们不能解决跨域传输数据的问题。识别未登录用户并不是防漏洞(研究)。
例如,它应该如何工作
客户转到domainOne并将一些东西添加到购物车中。而不是domainTwo (不过,通过链接输入域地址)并向购物车中添加一些其他内容。在购物车中,他拥有来自两个域的东西(在刷新页面之后)。
你知道如何解决这个问题吗?
不起作用的是:
如果你听不懂我的话,就问我一个问题。如果您认为,在两个域上使用共享(公共)购物车的eshop是个坏主意,不要告诉我,我们知道。
谢谢你的每一个回答。
发布于 2010-06-08 20:43:58
您可以使用第三个域来识别所有域上的客户。
例如,在http://thirdDomain.com/session.php上使用一个PHP,该文件包含在两个商店的所有页面中。
示例:
<script type="text/javascript" src="http://thirdDomain.com/session.php"></script>在您的客户切换域之后,您可以使用第三个域将他标识为同一个客户。
您可以将两个商店上的会话id分配给第三个域上的会话id,以访问两个商店的购物车。您只需要通知第三个域关于您的商店会话(即添加它们作为参数)。
根据您对代码和模板的灵活程度,您甚至可以使用来自第三个域的输出来定义您的商店中的会话id。这样,您就可以在所有域上使用相同的会话id。但是通常情况下,会话id分配应该是更安全的方式。
使用javascript版本,您还可以输出脚本,这些脚本可以将会话id添加到当前html页面中的其他域的所有传出链接和表单中。这可能是有趣的,如果您可以确定您的客户被阻止曲奇。您还可以使用javascript将现有会话通知父文档。
发布于 2010-06-02 09:14:17
一直有人问这个。
搜索SSO。
您需要通过域传递URL (或vai a POST)中的会话id,然后:
1)检查目标域中不存在会话
2)使用发送的会话id重新绑定会话
例如:
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.
发布于 2010-06-12 08:39:40
该模式非常简单,并被广泛使用。例如,由谷歌提供的众多服务。您可以通过跟踪浏览器和各种google服务之间的HTTP交换来了解整个情况。
假设我们的客户获得了第一个域名的授权。通过进入第二个阶段,我们必须:
唯一的问题是如何申请第一个域名。它可以是图片、JS请求或整个页面重定向。一定的选择取决于你。
https://stackoverflow.com/questions/2956214
复制相似问题