【问题标题】:Where exactly do I put a SESSION_START? [duplicate]我究竟应该在哪里放置 SESSION_START? [复制]
【发布时间】:2013-12-16 23:47:26
【问题描述】:

所以我正在创建自己的网站,并且我已经制作了相当多的登录文件。我只需要弄清楚将 session_start 放在哪里以保持用户登录。我到底把 session_start 放在哪里?我把它放在登录文件中吗?或者我把它放在哪里?

感谢您的帮助

【问题讨论】:

  • 你的意思是“我把这个放在文件的什么地方”?或者“哪些文件应该有session_start()”?
  • 哪些文件应该有它?
  • 还有一本手册,其中包含展示用法的示例,php.net/manual/en/book.session.php

标签: php session login


【解决方案1】:

把它放在你的 PHP 开始标签之后 <?php ... 像这样

<?php
session_start();
//... your code....


//more code....

阅读 PHP 手册中有关会话的更多信息。 Here

注意:另外请记住,如果您使用会话变量,则需要在每个页面上调用 session_start();

【讨论】:

  • 如果我的网站是模块化的并且我有一个包含在每一页中的header.php 文件怎么办。我可以添加 session_start();在里面?
  • @Omer,基本上是的。你试过了吗?
【解决方案2】:

把它放在开始标签之后,否则标头将被发送,会话,AFAIK,必须是第一个发送的标头

<?php
session_start();
//session code here
?>

【讨论】:

    【解决方案3】:

    就在&lt;?php 标记之后。

    确保在这个函数之前没有输出(甚至是空格符号左右)。

    【讨论】:

      【解决方案4】:

      您想将session_start(); 放在页面顶部,然后放在任何其他代码之前。但是,如果您使用包含来使您的生活更轻松,最好将其放在包含在所有文件中的文件的最顶部。例如,当我创建一个网站时,我将所有页眉代码和页脚代码放在单独的文件中,并将它们包含在其他文件中。我还有一个函数文件,该文件包含在网站的所有其他页面中。所以对于我的索引文件,它可能看起来像这样:

      <?php include_once("includes/header.php"); ?>
      
      <div id="content">
          Website Content
      </div>
      
      <? include_once("includes/footer.php"); ?>
      

      然后,我的头文件开始如下:

      <?php include_once("includes/functions.php"); ?>
      <!doctype html>
      <html>
          <body>
      

      然后在我的函数文件的顶部:

      <?php session_start();
      
      [functions]
      ?>
      

      这样,函数文件的代码首先运行,因此会话开始代码是最先命中的。为什么?在开始会话之前,您不能对浏览器进行任何类型的输出。

      【讨论】:

        【解决方案5】:

        最好有一个单独的文件而不是你的登录来做一些常见的事情。 我认为您的登录文件通常会处理用户验证和验证的事情。所以不要在每个页面上都包含该文件。

        还有一个文件

        • 包括所有必需的文件
        • 保留所有分析脚本
        • 初始化全局变量

        这个文件可以以&lt;?php session_start(); ?&gt;

        开头

        【讨论】:

          【解决方案6】:

          session_start() 需要进入 每个 引用$_SESSION 的页面/文件(显然包括登录页面)。

          因为你应该只调用一次,所以我倾向于编写一个lazy_session_start() 方法(并且倾向于将它放在一个包含文件中):

          /**
           * Lazily calls session_start (to prevent warnings).
           */
          function lazy_session_start() {
            if (!isset($_SESSION) || !is_array($_SESSION)) {
              session_start();
            }
          }
          

          可以这样调用(在你需要使用 $_SESSION 之前):

          <?php
          //you must either declare "lazy_session_start" function
          //or import the file containing the function definition.
          require_once('lazy_session_start.php'); //or something.
          
          lazy_session_start();
          //... you may now use the $_SESSION array.
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-06-29
            • 2017-08-14
            • 1970-01-01
            • 1970-01-01
            • 2020-04-01
            • 1970-01-01
            • 2013-08-20
            • 2022-09-29
            相关资源
            最近更新 更多