在我的PHP代码中,如果会话已经启动,并且我尝试启动一个新会话,我会收到以下通知:
注意:会话已经启动 - 忽略session_start()
我怎么能避免这个?
我是php的新手,我正在试图弄清楚如何使用会话检查并查看用户是否登录到网站,以便他们有权访问特定页面.
这是一件复杂的事情,还是因为我是一个无法理解的菜鸟?
谢谢您的帮助!
根据请求,您可以通过几种不同的方式判断会话是否已启动,例如:
$isSessionActive = (session_id() != "");
Run Code Online (Sandbox Code Playgroud)
要么:
$isSessionActive = defined('SID');
Run Code Online (Sandbox Code Playgroud)
但是,如果你开始一个会话,然后关闭它们,它们都会失败; session_id()将返回先前会话的ID,同时SID将定义.同样,如果您已经激活会话,此时调用session_start()将生成一个E_NOTICE.是否有一种理智的方法来检查会话当前是否处于活动状态,而不必求助于输出缓冲,关闭运算符(@session_start())或其他类似hacky的东西?
编辑:我写了一个补丁试图让这个功能包含在PHP中:http://bugs.php.net/bug.php?id = 52982
编辑8/29/2011:添加到PHP 5.4的新功能修复此问题:"通过新函数,session_status公开会话状态"
// as of 8/29/2011
$isSessionActive = (session_status() == PHP_SESSION_ACTIVE);
Run Code Online (Sandbox Code Playgroud)
编辑12/5/11:PHP手册上的session_status().
登录页面中出现以下警告:它在localhost中工作,但在远程主机中不工作
警告: session_start()[function.session-start]:无法发送会话cookie - 已经发送的标头(输出从第8行开始)
警告: session_start()[function.session-start]:无法发送会话缓存限制器 - 已发送的标头(输出从第8行开始)

<?php
session_start();
if(isset($_SESSION['usr']) && isset($_SESSION['pswd'])){
header('Location: content.php');}
?>
<body>
<center>
<form method='post' action='login.php'>
<!– in this example I link it with login.php to check the password & username–>
<table>
<tr><td>Username:</td><td><input type='text' name='usr'></td></tr>
<tr><td>Password:</td><td><input type='password' name='pswd'></td>
</tr>
<tr><td><input type='submit' name='login' value='Login'></td>
<td><input type='reset' name='reset' value='Reset'></td></tr>
</table>
</form>
</center>
</body>
Run Code Online (Sandbox Code Playgroud)
<body>
<a href="resumedownload.php">Click here to Download to Resume</a>
<?php
session_start();
if(!isset($_SESSION["usr"]) || !isset($_SESSION["pswd"])){
header('Location: index.php');}
include 'logoff.php';
?>
</body> …Run Code Online (Sandbox Code Playgroud) Ahoy StackOverflow,
我在我的项目中遇到过这个问题:简而言之,从我收集的内容来看,通过AJAX调用的PHP脚本没有正确地注册在index.php页面顶部设置的SESSION变量.起初,我认为这是由于会话锁定,所以我继续并添加session_write_close(),但没有解决问题.
此问题仅在新用户会话开始后的大约25%的时间内发生(即:用户登录时).
我继续删除了90%的代码,以便将错误降低到重现所需的最小编码.
Firebug通过ajax.php导致的错误结果

Firebug通过ajax.php的预期结果

注:这两个结果表明指数的回报print_r($_SESSION)为Array ( [userid] => 3724 [trialstatus] => 1 [trialtcompletions] => 0 [userlevel] => 5 ),它可以让我知道这个问题是不是与会话中的索引页面上设置.
有没有人知道一个修复(可能甚至不是代码,甚至可能是服务器设置),它将正确地允许通过AJAX调用的脚本正确访问Session变量?
测试复制方案
的index.php
<?php
if (session_status() === PHP_SESSION_NONE) session_start();
if (!isset($_SESSION['userid']))
{
$_SESSION['userid'] = 3724; //$login['AccountID'];
}
$_SESSION['trialstatus'] = "12";
$_SESSION['trialtcompletions'] = "12";
$_SESSION['userlevel'] = "12";
session_write_close();
print_r($_SESSION);
?>
<!DOCTYPE html><html><head><script src="./js/jquery.min.js"></script>
<script>
function loadStage(step,input,callback){
$.ajax({
type: "POST",
url: "./ajax.php",
data: { step: …Run Code Online (Sandbox Code Playgroud) 我有一个第三方脚本,并想知道如何在做某事之前确认PHP是否session_start()已经宣布?
something like if(isset($_session_start())) { //do something }
Run Code Online (Sandbox Code Playgroud) 我正在创建一个双语网站,并决定使用以下内容session_start来确定页面的语言:
session_start();
if(!isset($_SESSION['language'])){
$_SESSION['language'] = 'English'; //default language
}
Run Code Online (Sandbox Code Playgroud)
这个问题是它与Wordpress冲突,我得到以下内容:
警告:session_start()[function.session-start]:无法发送会话cookie - 已经发送的标头(输出从/home/neurosur/public_html/v2/wp-content/themes/default/header.php:8开始)第13行/home/neurosur/public_html/v2/wp-content/themes/default/region.php
有办法解决这个问题吗?
我可以从子文件夹访问我的SESSIONS,例如./我的网站上有/老师,/学生,但不是来自/下的文件.
我的设置:
在我的页面上方:
session_set_cookie_params(time()+86400000, '/', '.mysite.com', 0, 1);
ini_set('session.use_only_cookies', 1);
if(!isset($_SESSION))
{
session_start();
}
Run Code Online (Sandbox Code Playgroud)
我如何设置我的会话
session_regenerate_id(true);
$_SESSION['signature'] = $signature;
Run Code Online (Sandbox Code Playgroud)
我的PHP.ini
session.save_path = '/home/mysite/cvsessions'
Run Code Online (Sandbox Code Playgroud)
我错了什么?
我有一个网站的问题iv一直在使用easyphp服务器在本地工作.我现在已将它上传到网络服务器,之前它都在工作,现在我收到了php错误,例如:
Call to undefined function session_status() in /home/site/public_html/index.php on line 2
Run Code Online (Sandbox Code Playgroud)
它只是索引页面上的一个简单脚本,但所有其他页面都遇到了相同的会话错误问题,但它在本地工作,这使得它甚至变得奇怪.
<?php
if (session_status() !== PHP_SESSION_ACTIVE) {session_start();}
if (isset($_SESSION['key'])) {$sessionkey = $_SESSION['key'];}else {$sessionkey = '';}
if ($sessionkey == 'sbhjbKA2bsbhjbKA209bhjbKA2bsbhjbKA209KaXff19u0bsbhjbKA209KaXff19u9Ka'){
echo '<link rel="stylesheet" href="./css/template/template.css" />';
include 'connectmysqli.php';
include 'menu.php';
}
else
{echo '<h1 style="font-family:Verdana, Geneva, sans-serif; color:red;">Access Denied !</h1>';}
?>
Run Code Online (Sandbox Code Playgroud) 在我的 php 函数中,我想检查会话是否存在。基于会话的存在,我想返回 true 或 false。
我有一个登录函数,它在登录时使用session_start();并将值存储到会话变量中,当注销时它会做session_destroy();
现在我想检查会话是否存在。我怎样才能做到这一点
function ifsessionExists(){
// check if session exists?
if($_SESSION[] != ''){
return true;
}else{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)