Php 会话_status()发出第一个连接
我有一个网站,人们可以创建一个帐户,然后登录到他们的帐户 当我检查登录的输入(电子邮件和密码)时,我使用一个名为Php 会话_status()发出第一个连接,php,Php,我有一个网站,人们可以创建一个帐户,然后登录到他们的帐户 当我检查登录的输入(电子邮件和密码)时,我使用一个名为control\u login.php的文件。代码如下: // -> some DB calls checking whether the user exists or not... if(isset($user->email) && password_verify($_POST['password_login'],$user -> password)
control\u login.php
的文件。代码如下:
// -> some DB calls checking whether the user exists or not...
if(isset($user->email) && password_verify($_POST['password_login'],$user -> password)){
session_start();
$_SESSION['auth'] = $user;
$user_id = $_SESSION['auth']->id;
echo "Loading your profile...";
header("Refresh:2 ; url=http://www.someurl.com/account.php?id=$user_id");
exit();
}
else{
$errors_login['danger'] = "We couldn't find any account. Please try again";
}
function logged_only(){
if(session_status() == PHP_SESSION_NONE){
session_start();
}
if(!isset($_SESSION['auth'])){
echo 'Access denied';
header('Refresh:2 ; url=http://www.someurl.com');
exit();
}
}
如果一切正常,我启动一个会话并重定向到account.php
。如果没有,我将显示一条错误消息
此account.php
文件包含一个名为logged_only()
的特定函数,该函数在一切正常时启动会话,或者在没有会话时拒绝访问。代码如下:
// -> some DB calls checking whether the user exists or not...
if(isset($user->email) && password_verify($_POST['password_login'],$user -> password)){
session_start();
$_SESSION['auth'] = $user;
$user_id = $_SESSION['auth']->id;
echo "Loading your profile...";
header("Refresh:2 ; url=http://www.someurl.com/account.php?id=$user_id");
exit();
}
else{
$errors_login['danger'] = "We couldn't find any account. Please try again";
}
function logged_only(){
if(session_status() == PHP_SESSION_NONE){
session_start();
}
if(!isset($_SESSION['auth'])){
echo 'Access denied';
header('Refresh:2 ; url=http://www.someurl.com');
exit();
}
}
这是我的问题:当地一切正常。在现实生活中(即使用网站url时),使用Internet Explorer时一切正常。
但是,我在使用Chrome或Firefox时遇到以下问题:
control\u login.php
中得到“加载您的配置文件”,这意味着它找到了用户account.php
时,我从我的logged_only()
函数中获得以下“访问被拒绝”logged_only()
,连接失败,然后自动重定向到www.someurl.com
因此,只有在提交用户信息时出现这些www时,它才不会失败
因此,对于那些需要的人,以下是将任何非www更改为基于www的url的方法。您只需更新htacess
,如下所示:
# Redirect non-www to www:
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
这样,所有的url都将使用这些www!,一方面,您在标题上方回音,这被视为在标题之前输出(使用错误报告,您将看到)。现在,一旦浏览器关闭,会话可能会随之结束;缓存问题也会发生。@Fred-ii-谢谢你的评论。当我使用错误报告(E\u ALL)时,什么都不会显示……我在标题后进行了回显,它不会改变任何内容:(你还需要“显示”它们(如果有)-添加
ini\u集(“显示错误”,1)
对于您当前的E_ALL。无论用户是否登录,您都应该在每个脚本的顶部启动会话。如果在会话开始之前生成任何输出,您将得到一个错误。@Fred-ii-ok…没有显示错误。。。