PHP会话丢失:子域和https(SSL到非SSL)
我想我在“stackoverflow”上阅读并尝试了关于“会话,跨域和ssl”的所有相关主题。不幸的是没有用。PHP会话丢失:子域和https(SSL到非SSL)
我的情况下:
loginForm.html(非SSL) - > authUser.php(SSL) - > showAccount.php(非SSL)
的问题是,即这些文件放置在不同的子域中,并通过SSL或非SSL服务。
loginForm.html - >http://dev.domain.com
authUser.php - >https://ssl.domain.com
showAccount.php - >http://dev.domain.com
如果用户凭据是正确的,authUser.php
应该创建使用该会话通过showAccount.php
。
如前所述,我尝试了所有发布的解决方案。 供参考,我们来看看这个:Session lost when switching from HTTP to HTTPS in PHP。
我也试着扩展这个片段,如PHP Sessions across sub domains中所提到的session_set_cookie_params
,但这不起作用。
我也试过ini_set('session.cookie_domain', '.domain.com');
编辑:正如在回答要求,这里是使用的代码(最初被张贴雅各这里:Session lost when switching from HTTP to HTTPS in PHP)
https://ssl.domain.com/user/authUser.php
<?php
// auth with database was successful, so create the session
session_set_cookie_params(0, '/', '.domain.com');
session_start();
$currentSessionID = session_id();
$_SESSION['testvariable'] = 'It worked';
$InsecureServerDomain = 'dev.domain.com';
$pagePath = '/showAccount.php';
echo '<a href="http://' . $InsecureServerDomain . $pagePath . '?session=' . $currentSessionID . '">Transfer Cookie from secure to insecure </a>';
?>
http://dev.domain.com/showAccount.php
<?php
$currentSessionID = filter_input(GET, "session");
session_set_cookie_params(0, '/', '.domain.com');
session_id($currentSessionID);
session_start();
if (!empty($_SESSION['testvariable'])) {
echo $_SESSION['testvariable'];
} else {
echo 'It did not work.';
}
?>
$_SESSION
总是空的。
有什么提示吗?
一如既往,看到一些代码会有所帮助。也许您存储会话的部分以及您如何使用Cookie /数据库。这里是一个关于如何做cross-domain authorization真棒教程,给这个家伙一些更多upvotes!
保护只是您的登录/授权毫无意义。正在查看网络流量的攻击者可以窃取每次请求传递给服务器的登录cookie /会话令牌,然后以该用户身份登录。当然,密码将是安全的,但它实际上并不能保护用户的会话免受中间人攻击(例如在不安全的WiFi网络中)的劫持。
有关如何工作的示例,请参阅Firesheep。
谢谢你的回答,乔丹麦圭根。我没有通过SSL传输所有数据的资源。所以我决定实施这种安全/资源的妥协。我只是添加了一些代码,你会改进什么? – Andrew 2012-04-24 10:10:01
你的过滤器是错误的。请参阅文档:php.net/manual/en/function.filter-input.php您还必须指定一个过滤器php.net/manual/en/filter.filters.php您可能要使用INPUT_GET。您可能还想以某种方式加密或散列会话ID。我强烈建议建立你自己的令牌。这种方式不仅可以在HTTPS/HTTP之间传递,还可以传递给Node.JS,并发送推送通知... – 2012-04-24 12:59:36
感谢乔丹 - 你说得对,我的filter_input出错了()。这现在已经修复,cookie和会话设置正确(在会话保存路径中看到),但是'showAccount.php'still无法读取会话。我与你一起建立自己的安全问题标记,但它应该以这种基本方式工作。你有更多的提示吗? – Andrew 2012-04-24 13:19:44
巴斯特,谢谢你的回答!我刚刚添加了所需的代码。 – Andrew 2012-04-24 10:08:04