PHP会话已经开始

时间:2019-04-26 13:31:50

标签: php session

我的网站上有一个页面,该页面使用ajax调用php文件。我要求用户登录才能访问任一页面,并在调用php文件的页面上使用session_start()(假设main.php调用bg.php)。我还需要在session_start()上加入bg.php,因为我需要访问会话变量。但是,我被php的告示迷住了

A session had already been started - ignoring session_start()

所以,我尝试使用

if (!isset($_SESSION)) session_start();

但是,我一直收到错误,因此我尝试将其完全删除,因为它表示无论如何都将其忽略。但是,然后bg.php停止识别会话变量。如何停止收到通知?

3 个答案:

答案 0 :(得分:1)

您应该使用session_status()功能检查会话状态,以避免重复会话开始。例如:

if (session_status() == PHP_SESSION_NONE) {
    session_start();
}

答案 1 :(得分:0)

我建议编写一个库文件,该文件首先包含在所有.php文件中。它包含所有其他页面定义的功能和启动代码。这有助于创建清晰的结构,避免复制和粘贴常见的代码部分。

*。php

<?PHP
require_once("lib-standard.php");
# .... more code

lib-standard.php

<?PHP
session_start();
# more startup code (locale, timezone, login, check users, check rights, ...)
# common functions
# common classes

答案 2 :(得分:0)

我喜欢这样处理php会话控制: 验证用户之后,我将设置一个会话变量。 像:

   $permitted_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

   $_SESSION['loggedIn']=generate_string($permitted_chars, 20);

然后在每个页面的顶部,我希望我的会话控件为:

        <?php
        session_start();
         if (empty($_SESSION['loggedIn'])){
          header("Location: login.php");
          exit();
         }   

编辑:另外,如果要加载外部页面(如dbconnect.php页面),则只需输入:

        <?php
        if (empty($_SESSION['loggedIn'])){
         header("Location: login.php");
        exit();
       } 

在这些文件的顶部。...

如果我真的很健壮,那么我将在登录时将生成的“已登录”代码存储在db表中,并将几个标识符(例如用户名和密码)加载到会话变量中,然后在进行初始检查后,检查会话是否有效,如

     " select count users from user_tbl where `name`=`".$_SESSION['name']."` and `pass`=`".$_SESSION['pass']."` and `key`=`".$_SESSION['loggedIn']."`"

然后

       if ($count=="0"){
        header("Location: login.php");
      exit(); 
       }