1

在 PHP 中使用任何会话变量之前是否必须使用 session_start()?我在开头没有声明 session_start() 的情况下尝试了以下代码,它工作正常。

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

另外,我没有使用任何 $_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
?>
4

3 回答 3

2

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

你不是在 db_connect.php 中调用它吗?另外,我很确定您不会收到任何错误,会话将是空的。

于 2012-07-07T00:08:41.853 回答
1

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

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

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

于 2012-07-07T00:14:01.223 回答
0

php 中的每个会话都必须使用 session_start()。传递一个变量值不需要使 POST 或 GET 相同,因为已经存在值递增的情况。如果在同一个会话中没有ouver值是null或空白,如果你以同样的方式打开页面,则条件错误。

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

isset 检查是否为空这个需要!之前,IF(!isset($_SESSION['user_id'])在第二种情况下,将检查它是否不是无效的,因为会话存在或不存在,以及是否设置了一个值 inesistente 为空。所以正确的看法是这样的:is_null($_SESSION ['user_id'])

重要的是,在登录页面中不包括但重定向到该页面。在带有header.

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

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

于 2014-07-21T04:04:57.140 回答