2017-04-15 383 views
0

我在获取简单的会话数据值以在页面重定向后保留问题时出现问题。函数检查通过邮政发送的用户数据,如果在数据库中的匹配值它的会话数据集的价值观和重定向到另一页:页面重定向后会话数据丢失

if ($login_ok) { 
     //set session data     
     $_SESSION ['online'] = 1; 
     $_SESSION ['userid'] = $id; 
     $_SESSION ['username'] = $name; 
     //redirect to new page 
     redirect('start.php'); 
} 

在新的页面代码中的会话数据未设置。简单测试返回空值,就好像会话数据未设置一样:

echo 'Session Login Status: ' . $_SESSION ['online']; 
    echo 'Session UserID: ' . $_SESSION ['userid']; 
    echo 'Session Username: ' . $_SESSION ['username']; 

用上面的echo语句替换重定向可以正常工作。会话数据是否已设置并且在加载任何页面数据之前激活重定向意味着会话变量未分配?

为了确保活动的会话始终可用,一个包含文件包含以下代码:

if (session_status() == PHP_SESSION_NONE) { 
    session_start(); 
    } 

任何想法是什么问题就在这里?

非常感谢, 千瓦

+1

您是否在start.php测试以评论您的include和write session_start();没有条件? –

+0

@Francezo相同的代码通过相同的包含文件在start.php中运行,即:if(session_status()== PHP_SESSION_NONE){session_start();} } – Kwangle

+1

我的意思是做一个测试。无条件地创建session_start(),或者创建一个echo session_status()。也许session_status没有返回你所期望的。只是为了调试。 –

回答

1

检查会话的进展之前设定

if isset($_SESSION ['online']) and 
    isset($_SESSION ['userid']) and 
    isset($_SESSION ['username']) 
{ 
    echo 'Session Login Status: ' . $_SESSION ['online']; 
    echo 'Session UserID: ' . $_SESSION ['userid']; 
    echo 'Session Username: ' . $_SESSION ['username']; 
} else { 
    echo 'Redirect to login or Session expired'; 
} 

而是重定向试试这个

$uid = $_SESSION['USERID']; 
if (isset($uid) || $uid != NULL) 
{ 
if (!headers_sent()) { 
    header('Location:main.php'); 
    exit; 
    } 
    else { 
    ?> 
    <script>window.location = 'main.php';</script> 
    <?php 
    } 
} 
+0

是的,这是评估增值税设置,但在重定向后,他们不available.Thanks你的帮助。 – Kwangle

0

这似乎是一个服务器而不是代码问题。在本地主机服务器上运行代码可正常工作。希望这对遇到类似问题的人有所帮助。

说了这么多,我不知道如何设置远程服务器来允许会话数据。该服务器有基于浏览器的网络管理软件称为cPanel,有什么建议吗?