与 php 中的 session_start() 相关
Posted
技术标签:
【中文标题】与 php 中的 session_start() 相关【英文标题】:related to session_start() in php 【发布时间】:2015-03-17 04:57:49 【问题描述】:我是 php 的新用户。我正在处理一些 php 项目。想要一些关于 php 会话的帮助。我有 login.html 页面,该页面对 login.js 执行表单操作。登录执行时,用户名和密码已请求登录.php 页面的 URL,以检查 mysql db 表中的用户名和密码,并启动 session_start() 并将 $_SESSION 设置为用户名和密码。如果为真,则在带有会话的 home.php 页面上重新定位。但我的 home.php 页面内容 html 代码与此 php 代码
<?php
if(!isset($_SESSION["USER"]))
include ('../content/logout.php');
exit();
?>
我已在 login.php 上启动 sessio_start()。我已检查 print_r($_SESSION);对于会话已经开始没有。但它的开始。当我搬迁到 home.php 它不起作用。我在 home.php 上检查它到 print_r 但它没有显示。我附上了用 home.php 编写的 php 代码。 它告诉我错误 [client 127.0.0.1:53005] PHP Warning: session_destroy(): Trying to destroy uninitialized session in logout.php........
我的注销页面包含带有此 php 代码的 html 代码
<?php
session_destroy();
session_unset();
?>
并重新定位到 login.html 页面。
【问题讨论】:
你必须在每个 php 文件上都有session_start()
...它更像是帖子...它每次都会通过
你能告诉我吗。每个页面都需要 session_start() 是必要的。如果我们从登录页面开始,那么为什么我们需要在另一个页面重新开始
【参考方案1】:
您必须重新开始会话。必须在每一页上。
<?php
session_start();
if(!isset($_SESSION["USER"]))
include ('../content/logout.php');
exit();
?>
要使用会话变量,您总是必须在您拥有的每个 php 上启动会话。这有点像不发送的 POST ^^ 而且它必须在任何输出之前!但是你必须告诉你的 php 有一个会话并且你想使用它。
编辑
见this quote
session_start() 根据通过 GET 或 POST 请求或通过 cookie 传递的会话标识符创建会话或恢复当前会话。
【讨论】:
你能告诉我吗。每个页面都需要 session_start() 是必要的。如果我们从登录页面开始,那么为什么我们需要在另一个页面重新开始。 就像我说的......在更多页面上它并没有真正开始...... session_start 更像是一个包含会话。但是......你只需要添加它。应该这样做:) 但假设我没有在该 php 代码上添加 session_start()。那么它有效吗?如果它不起作用,我们如何在不将 session_start 写入另一个页面()的情况下获得它;如果有人想要这样.. 如果不向每个页面添加 session_start,没有其他方法可以在会话中存储数据。实际上,如果您在 OOP 中编码,您没有 1000 页。您将拥有一个包含所需 php 文件的控制器类,并且控制器包含会话开始,因此在这种情况下只需要一次。但是在您的情况下,您显然需要在每个页面上使用它:) 其他方式是将数据存储在数据库中,或者可能是 cookie... 好的 :) 谢谢你的详细解释。 :) 你能告诉我会话的确切定义吗?【参考方案2】:当服务器接收到一个HTTP请求时,它接收到GET/POST/COOKIE数据,并且不知道客户端与哪个服务器端会话相关。
当您调用session_start()
时,服务器根据通过 GET 或 POST 请求或通过 cookie 传递的会话标识符创建会话或恢复当前 [会话]。
所以每次您需要在 php 中创建会话(例如:读/写 $_SESSION)时,您必须首先使用session_start()
调用会话,服务器将根据创建或加载会话GET/POST/COOKIE 数据。
如果每次调用session_start()
都很痛苦,请使用session.auto_start
参数。或者您可以将session_start()
放在auto_prepend_file
中。
【讨论】:
以上是关于与 php 中的 session_start() 相关的主要内容,如果未能解决你的问题,请参考以下文章
与 session_start() 相关的登录时开始但在其他页面上不起作用
PHP session_start() 函数:为啥我每次使用与 PHP 会话相关的任何东西时都需要它
PHP 会话,为啥 session_start() 需要多次?