PHP+;会话不';不要第一次登录

PHP+;会话不';不要第一次登录,php,session,redirect,login,Php,Session,Redirect,Login,我的登录系统只有在我登录两次后才能登录。第一次,它不会(自动)登录。 我有一个带有用户名和密码的简单表单,其中包含action=“login.php”,您可能会认为它包含验证登录等的全部代码。最后,如果一切正常: Cookie::set('page-main-login-cookie', serialize($arr), time()+60); header('location: ../index.php'); 在index.php(其中包含调用login.php的表单)页面顶部: ob_st

我的登录系统只有在我登录两次后才能登录。第一次,它不会(自动)登录。 我有一个带有用户名和密码的简单表单,其中包含
action=“login.php”
,您可能会认为它包含验证登录等的全部代码。最后,如果一切正常:

Cookie::set('page-main-login-cookie', serialize($arr), time()+60);
header('location: ../index.php');
index.php
(其中包含调用
login.php
的表单)页面顶部:

ob_start(); session_start(); include('cookies.php'); include('sessions.php'); 
标记之后:

if(Cookie::Exists('page-main-login-cookie')){
    $data = unserialize(stripslashes($_COOKIE['page-main-login-cookie']));
    if($data['status'] == 1){   
        Cookie::set('email', $data['email'], time() + (86400 * 7));
        Session::set('email', $data['email']);
        echo "<script type='text/javascript'> page_redirect(); </script>";
    }else{
        echo "<script type='text/javascript'> page_error(); </script>";
    }
    Cookie::Delete('page-main-login-cookie', time() - 3600);
}
到目前为止我试过什么

  • 更改了
    标题('location:../index.php')
    标题('位置:http://www.mysite.com');
  • 添加了
    会话写入关闭()
    Session::set('email',$data['email'])之后

  • 它们都不起作用。

    可能是因为您的登录代码在您的html之后出现,因此,即使脚本在脚本末尾登录,您也似乎没有登录


    通常您希望尽可能将PHP和HTML分开(在不同的文件中),首先执行所有PHP业务逻辑,然后输出所有HTML。

    我认为问题在于重定向代码的位置。如果您在
    之前执行了检查和重定向,那么这将很好。您是否意识到某人只需创建自己的cookie即可轻松地在会话中存储任意电子邮件地址?如果这是唯一的授权方式,该用户可以使用他/她喜欢的任何电子邮件登录到你的应用程序。@Janoz,这就是一个例子。实际上,我的代码有以下内容:
    Cookie::set('email',$data['email',time()+(86400*7));//7天会话::set('email',$data['email']);会话::set('name',$data['name']);会话::set('id',$data['id'])但是告诉我,我是否继续有安全问题?当然$数据被序列化到cookie中。Cookie存储在客户端,可以轻松操作。我可以制作一个名为“页面主登录cookie”的cookie,并将其放入我自己版本的序列化数据映射中。为什么不直接将数据存储到会话中,而不是通过不受信任的客户端进行传递呢?但是,如果可以在login.php中进行设置,为什么还要在cookie中进行传递呢?它过于复杂、不安全且容易出错。虽然通过该检查,我无法使用任意电子邮件登录,但我仍然可以更改$data中的每一项(例如id和名称)。如果以后使用id来识别用户,我仍然可以模拟任何人。好吧,我已经将代码更改为顶部,现在用户第一次成功登录..但是如果他刷新页面,登录就会消失。我想您的代码中可能有一些错误,可能在以下行中:Cookie::Delete('page-main-login-Cookie',time()-3600);不,问题不在那里。问题在这一行:
    如果(!isset($\u COOKIE['email']){Session::Destroy();}
    如果我删除它,它会工作..但我不明白。我需要这个验证..对(Cookie::Get('email')和Session::Get('email')进行var_转储,并在此处提供信息。问题出在条件上
    if(Session::Exists('email')){if(!Cookie::Exists('email')){Session::Destroy();}else{if(Cookie::Get('email')!=Session::Get('email')){Session::Destroy();Cookie::Delete($Cookie['email'],time()-3600);}}}
    我会接受你的正确答案,因为它解决了我的主题问题。谢谢
    function page_redirect(){
        alert("Done!");
        setTimeout(function(){
            location.reload();
        }, 1500);
    }