2012-07-07 110 views
1

在PHP中使用任何会话变量之前是否不强制使用session_start()? 我试了下面一段代码,没有在开始时声明session_start(),它工作正常。声明会话变量php

所以,现在我很困惑。请帮忙 !!!!

此外,我没有使用任何$ _POST或$ _GET将$ uname传递给home.php,但它仍然如何工作?如果我们使用include'home.php',那么它会将login.php和home.php视为同一页吗?

// code login.php// 
<? 
require_once 'db_connect.php'; 

if (isset($_SESSION ['user_id']) && !empty($_SESSION ['user_id'])) 
{ 

    $u_name = $_SESSION['user_name']; 
    include 'home.php'; 
} 
else 
{ 
//some stmt 
} 
?> 

/*******home.php file ****/ 

<?php 
require_once 'dbconnect.php'; 
$_SESSION['username'] = $u_name; 
//echo $_SESSION['username']; 
//blah blah 
?> 

回答

2

如果session.autostart没有在php.ini中设置,您肯定需要它。但是你可能会知道那个。

你不在db_connect.php中调用它吗?此外,我敢肯定,你不会有任何错误,会议只是空的。

+0

是的......我在db_connect中调用它。所以,如果我在db_connect中调用,那么我不需要在home.php中再次调用?我可以包含任何数量的文件并在其中使用会话变量吗? – preet 2012-07-07 00:12:36

+0

是的,session_start只需要为服务器的每个请求调用,就像32bitfloat解释的那样。包含/必需的脚本不在自己的范围内运行 – 2012-07-07 00:16:28

+0

好的.....现在清除!谢谢MrAzulay和32bitfloat – preet 2012-07-07 00:19:42

1

如果你通过php包含一个文件,Session保持活动状态(因为任何其他变量也被设置)。如果您要将此文件作为新请求访问,则需要设置session_start()。 此行为是因为include和require需要将包含文件的代码移动到当前代码中,就像您将代码键入到单个文件中一样。

另外:你不需要两次需要dbconnect.php。

编辑:你问了两个文件用作同一页 - 该页面是在整个php代码完成后给出的输出。页面本身并不关心在内部使用多少文件来生成它。

+0

所以是这样的原因,我不必通过POST或GET方法将$ u_name传递给home.php,并可以在home.php中使用它? – preet 2012-07-07 00:28:09

+0

是的,这是正确的。所有变量都被共享到所需的文件。 – 2012-07-07 00:31:37

+0

实际上是的,但要注意在if条件中设置$ u_name。如果这个条件返回false,你会在home.php中得到一个“未定义变量”的错误,所以最好用isset()或其他方法检查它。 – 32bitfloat 2012-07-07 00:33:06

0

使用session_start()对于php中的每个会话都是强制性的。通过一个变量值不需要使POST或GET相同,因为已经存在这种情况下的值增量。如果在同一个会话中没有任何值为空或空白,如果以与条件错误相同的方式打开页面。

(!Isset($_SESSION ['user_id']) &&!​Is_Null($_SESSION['user_id']))

isset检查,如果空这方面的需求!之前,IF(!isset($_SESSION['user_id']),第二种情况是检查它是否无效,因为会话存在或不存在,并且如果设置了值,则inesistente为空。所以正确的看法是:is_null($_SESSION ['user_id'])

重要的是,在登录页面不包括但是重定向到页面。在header的情况下。

或者可以在单个页面中完成所有操作,但在称为登录页面的页面上显示将不合法。默认值是索引,即如果登录保留在文件夹中,则将其放在索引页和文件夹的地址中。

会话仍然可以打开的原因是,有时Web服务器没有意识到已删除部分代码并从系统缓存中加载它。

+1

总是设置'session_destroy();'当你想注销 – 2014-07-21 11:36:37