与 session_start() 相关的登录时开始但在其他页面上不起作用
Posted
技术标签:
【中文标题】与 session_start() 相关的登录时开始但在其他页面上不起作用【英文标题】:Related to session_start() start on login but not work on other page 【发布时间】:2015-03-17 03:08:56 【问题描述】:我是 php 的新用户。我正在处理一些 php 项目。想要一些关于 php 会话的帮助。我有 login.html 页面,该页面对 login.js 执行表单操作。登录执行时,用户名和密码已请求登录.php 页面的 URL,以检查 mysql db 表中的用户名和密码,并启动 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 Warning: session_destroy(): Trying to destroy uninitialized session in logout.php........
我的注销页面包含带有此 php 代码的 html 代码 并重新定位到 login.html 页面。
【问题讨论】:
那你为什么要销毁它? 【参考方案1】:您必须在使用之前启动会话。
session_start();
【讨论】:
【参考方案2】:在您要访问会话变量的每个页面上,您需要在页面顶部添加 session_start();
【讨论】:
【参考方案3】:在Session Start And Destroy下面的链接中查看这个相关答案
这与上面链接中的内容相同。
您所要做的就是为登录创建一个会话。所以这里是诀窍。每次从 index 移动到 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 的会话是否为非空字符串。如果这两件事都失败了,那么我们可以重定向到 login.php 页面,因为这意味着用户没有登录。
对于您网站中的每个页面,如果您在页面顶部有上述脚本,则如果用户未登录,它将重定向用户。这样,您可以保护您的页面免受非会员的侵害。如果他们已登录,他们将能够查看该页面。
退出 如果您查看 logout.php 的代码,您将看到以下内容:
<?PHP
session_start();
session_destroy();
?>
这就是注销用户所需的全部内容:启动会话,然后发出 session_destroy 命令。您所需要的只是从您网站上的任何位置指向此页面的链接。该链接将类似于您的 HTML:
<A HREF = logout.php>Log Out</A>
当用户单击此链接时,他们将被带到带有破坏会话的代码的页面。
我希望这会有所帮助。
【讨论】:
以上是关于与 session_start() 相关的登录时开始但在其他页面上不起作用的主要内容,如果未能解决你的问题,请参考以下文章
PHP session_start() 函数:为啥我每次使用与 PHP 会话相关的任何东西时都需要它