与 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 session_start() 函数:为啥我每次使用与 PHP 会话相关的任何东西时都需要它

PHP 会话,为啥 session_start() 需要多次?

session_start() 需要读取 $_SESSION

Warning:session_start()failed: 错误