2

我想我在 stackoverflow 上阅读并尝试了有关“会话、跨域和 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 whenswitching from HTTP to HTTPS in PHP
我还尝试使用PHP Sessionssession_set_cookie_params中提到的跨子域扩展此代码段,但这都不起作用。 我也试过
ini_set('session.cookie_domain', '.domain.com');

编辑:正如所要求的答案,这里是使用的代码(最初由 Jacob 在这里发布:Session lost whenswitching 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总是空的。

有什么提示吗?

4

2 回答 2

1

保护您的登录/授权是没有意义的。查看网络流量的攻击者可以窃取您在每次请求时传递给服务器的登录 cookie/会话令牌,然后以该用户身份登录。当然,密码是安全的,但它实际上并不能保护您的用户会话不被中间人攻击劫持,例如,在不安全的 WiFi 网络上。

有关其工作原理的示例,请参见 Firesheep。

于 2012-04-24T02:07:31.980 回答
0

与往常一样,查看一些代码会有所帮助。也许是您存储会话的部分以及您如何使用 cookie/数据库。这是一个关于如何进行跨域授权的很棒的教程,给这个家伙更多的支持!

于 2012-04-24T01:58:51.087 回答