这是正确的Session_start()

时间:2012-09-14 00:57:32

标签: php session cookies browser session-cookies

好吧,会话有一个小问题。似乎某些浏览器没有放置会话,就像我爸爸的mac书一样,但问题是他的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的一切,主要是对我这样的人有用,为什么会抨击甚至被允许,如果我在错误的部分张贴,请告诉我这样,并重定向我。它的专业性。谢谢你们。

2 个答案:

答案 0 :(得分:0)

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

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

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

如果您的网站同时以www.website.comwebsite.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版本。

答案 1 :(得分:0)

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

我通常在所有网页上包含的文件顶部都有session_start()