与session_start()相关,在登录时启动,但在其他页面上不起作用

问题描述 投票:0回答:3

我是PHP的新用户。我正在开发一些php项目。想要关于php中的会话的一些帮助。我有login.html页面,其形成对login.js的动作执行。当登录执行时,用户名和密码已经将URL请求登录到login.php页面以检查mysql db table中的用户名和密码,并启动session_start()并将$ _SESSION设置为用户名和密码。如果为true,则在home.php页面上重新定位。但我的home.php页面内容html代码与这个PHP代码我已经开始会话在login.php它开始。我已经通过print_r($ _ SESSION)检查它,但当它位于home.php时,它直接找到logout.php。它显示了我的错误[client 127.0.0.1:53005] PHP警告:session_destroy():试图在logout.php中销毁未初始化的会话........

我的注销页面包含带有此php代码的html代码并重新定位到login.html页面。

mysql php-5.5
3个回答
0
投票

您必须在使用之前启动会话。

  session_start();

0
投票

在您要访问会话变量的每个页面上,您需要在页面顶部添加session_start();


0
投票

Session Start And Destroy下面的链接中查看此相关答案

这与上面链接中的内容相同。

您所要做的就是为登录创建会话。所以这就是诀窍。每次从索引移动到home时,都应检查登录会话是否存在。如果没有,请要求用户登录。

检查用户是否已登录

<?PHP
    session_start();

    if (!(isset($_SESSION['login']) && $_SESSION['login'] != '')) {

        header ("Location: login.php");
    }
?>

我们再次开始PHP会话。接下来的IF声明非常复杂。但我们正在测试两件事:是否设置了一个名为login的用户会话?这个会话是一个空白字符串吗?

!(isset($_SESSION['login']) && $_SESSION['login'] != '')

第一部分是这样的:

!(isset($_SESSION['login'])

要检查会话是否已设置,您可以使用内置函数isset。我们之前使用的是NOT运算符。 (NOT运算符是一个感叹号。)所以我们说,“如果没有设置会话”。会话可能已设置,但可能包含“1”。我们还需要检查名为login的会话是否为NOT空字符串。如果这两件事都失败了,那么我们可以重定向到login.php页面,因为这意味着用户没有登录。

对于您网站中的每个页面,如果您在页面顶部有上述脚本,则会在用户未登录时重定向用户。这样,您就可以保护您的网页免受非会员的侵害。如果他们已登录,他们将能够查看该页面。

注销如果你看一下logout.php的代码,你会看到以下内容:

<?PHP
    session_start();
    session_destroy();
?>

这就是您注销用户所需的全部内容:启动会话,然后发出session_destroy命令。您只需从您网站上的任何位置链接到此页面即可。链接将像您的HTML一样:

<A HREF = logout.php>Log Out</A>

当用户单击此链接时,他们将被带到包含销毁会话的代码的页面。

我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.