我的网站上有一个页面,该页面使用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
停止识别会话变量。如何停止收到通知?
答案 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();
}