【问题标题】:HTTPS session lost/not existsHTTPS 会话丢失/不存在
【发布时间】:2015-09-16 08:18:19
【问题描述】:

我在使用 https 协议登录网站管理时遇到问题。如果我登录,它会写我的错误消息“你不被允许。返回登录页面”。应该是哪里出了问题?它在 http 协议上运行良好 :-( 感谢您的帮助!

带有登录名的index.php

<?php
    include_once "../inc/connection.php";

    if(isset($_POST['go'])){
        $usr = mysqli_real_escape_string($conn, htmlentities($_POST['u_name']));
        $psw = SHA1($_POST['u_pass']) ; //using SHA1() to encrypt passwords  
        $q = "SELECT * FROM users WHERE username='$usr' AND password='$psw'";
        $res = mysqli_query($conn, $q);
        if(mysqli_num_rows($res) == 1){
            session_start();   
            $_SESSION['log'] = 'in';
            header('location:photos.php');
        } else {
            $error = 'Wrong details. Please try again'; 
        }
    }
?>

和photos.php

<?php 
session_start();

if( !isset($_SESSION['log']) || ($_SESSION['log'] != 'in') ){
    echo "You are not allowed. <a href='index.php'>back to login page</a>";
    exit();
}

if(isset($_GET['log']) && ($_GET['log']=='out')){
    session_destroy();
    header('location:index.php');
}

?> 

【问题讨论】:

  • 会话总是从文件顶部开始。在文件的第一行写 session_start()
  • 你的意思是在 index.php 中?
  • 是的。你应该在索引文件的顶部写 session_start() 。永远记得从顶部开始
  • @urfusion 在哪里找到session_start() 方法并不重要。您应该考虑的唯一一件事是在调用该方法之前没有任何输出。
  • @user3216673 您的登录系统不安全!您应该始终检查登录用户是否是数据库中的有效用户。您必须在会话中保留用户名和加密密码。

标签: php session https


【解决方案1】:

我认为您的会话路径不可写。 试试

ini_set("session.save_handler", "files");
session_save_path ("/tmp");

【讨论】:

    猜你喜欢
    • 2020-08-24
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 2011-12-11
    • 2019-01-08
    • 2010-10-01
    • 1970-01-01
    相关资源
    最近更新 更多