2

好吧,会话有一个小问题。似乎某些浏览器没有放置会话,例如我父亲的 mac book,但问题是他的 Safari 仅阻止来自第三方的 cookie,即使我说从不阻止会话也没有启动。只有少数例子是这样的;我的兄弟 mac 工作正常。无论如何这里是代码:

登录页面:

    if ($email==$dbusername&&md5($pass)==$dbpassword){
            $_SESSION['username']=$email;
            header( 'Location: http://www.website/start.php' ) ;

首页:

session_start();
if($_SESSION['username']){
}
else{
die("<li style=\" color: black; font-family: Helvetica, sans-serif;
margin-left: 550px; margin-top: 300px; font-size: 24px; \" ><a  style=\"text-decoration: none;\" href=\"index.php\">Login or Register<a></li>  ");

无论如何,在我爸爸的 mac 和我今天测试的另一台电脑上,我发现会话从未创建过。有什么帮助吗?我也是stackoverflow的新手,请不要为这篇文章抨击我,我的意思是从我所听到的关于stackoverflow的一切来看,主要是它对像我这样的人有用,为什么甚至允许抨击,如果我在错误的部分发帖请告诉我这样并重定向我。它的专业性。多谢你们。

4

2 回答 2

0

尽管您需要回答 @haynar1658 的问题,但如果您session_start()在两个页面上都使用,则潜在的问题可能是您的重定向:

header( 'Location: http://www.website/start.php' ) ;

(我假设你的意思www.website.com或类似的东西)。

如果您的站点同时作为www.website.com和可用website.com,那么如果您登录,就会出现您所描述的问题website.com。然后您将打开一个会话,website.com不会打开,www.website.com因此在重定向后您将看到您的错误消息。

编辑:要让您的会话跨子域工作,您可以使用以下内容:

$some_name = session_name("some_name");
session_set_cookie_params(0, '/', '.website.com');
session_start();

您使用的任何地方session_start();

另一种方法是使用.htaccess文件之类的东西来始终重定向到www版本。

于 2012-09-14T01:05:44.657 回答
0

session_start()应该在保存到会话的页面上以及从会话中检索数据的页面上。

我通常session_start()在所有页面上都包含一个文件的顶部。

于 2012-09-14T02:19:18.367 回答