我的会话不会在其他页面上保留

时间:2017-12-01 18:46:50

标签: php session

我制作了一个自定义代码以保留该部分,我很快就在一个页面上,我返回到同一页面,保存了会话并返回登录成功。

但是当我要从这个页面上的表格中保存信息时,我会检查我是否已登录并且在我失败时返回。

我还注意到,当我登录并浏览导航菜单到另一个检查登录的页面时,会话tbm不会保留。

有谁知道它可能是什么,或者你是否发现了我在这些功能中缺少的东西?

登录后保存表单信息的方法

  <? php
    include_once 'functions.php';

    sec_session_start ();

    $ error_msg = "";
    $ page = "postar.php";

    if (isset ($ _ POST [post]) && $ _POST [post] == ​​"Upload") {
      $ Image = "";

      if (isset ($ _ FILES [btcapa]) &&! empty ($ _ FILES [btcapa] [name])) {
        $ btimage = $ _FILES [btcapa];
        switch ($ _ POST [sacervo]) {
          case '1':
            $ update = "img / comic";
            break;
          case '2':
            $ update = "img / books";
            break;
          case '3':
            $ updir = "img / files";
            break;
        }
        $ Image = valida_upload ($ btimage, $ update);
        if ($ Image [0] == '<') {
        $ error_msg. = "<li> Document: not loaded." $ btimage [name]. "</ li>";
        $ error_msg. = $ Image;
        $ Image = '';
      }
    }

    if (login_check ($ mysqli) == true) {
      switch ($ _ POST [sacervo]) {
        case '1':
          $ error_msg. = valida_gibis ($ mysqli, $ Image);
          break;
        case '2':
          $ error_msg. = validate_book ($ mysqli, $ Image);
          break;
        case '3':
          $ error_msg. = validate_files ($ mysqli, $ Image);
          break;
      }
      if ($ error_msg == '') {
        if (! empty ($ Image)) {$ upload = move_uploaded_file ($ _ FILES [btcapa] [tmp_name], $ Image); }

        $ msg_sucesso = "<li> Successfully inserted. </ li>";
        header ('Location: ../'.$page.'?retorno='.$msg_sucesso);
      } else {
        header ('Location: ../'.$page.'?retorno='.$error_msg);
      }
    } else {
      $ error_msg. = "<li> Could not insert, please log back in. </ li>";
      header ('Location: ../postar.php?retorno='.$error_msg);
    }
    }
  ?>

个人登录功能

function sec_session_start() {
        $session_name = 'SESSION';   // Estabeleça um nome personalizado para a sessão
        $secure = SECURE;
        // Isso impede que o JavaScript possa acessar a identificação da sessão.
        $httponly = true;
        // Assim você força a sessão a usar apenas cookies. 
       if (ini_set('session.use_only_cookies', 1) == FALSE) {
            header("Location: ../error.php?err=Could not initiate a safe session (ini_set)");
            exit();
        }
        // Obtém params de cookies atualizados.
        $cookieParams = session_get_cookie_params();
        session_set_cookie_params(time()+3600,
            $cookieParams[path], 
            $cookieParams[domain], 
            $secure,
            $httponly);
        // Estabelece o nome fornecido acima como o nome da sessão.
        session_name($session_name);
        ob_start();  
        session_start();            // Inicia a sessão PHP 
        session_regenerate_id();    // Recupera a sessão e deleta a anterior.

        setcookie(session_name(), '', time() + 3600, $params[path], $params[domain], $secure, $httponly);
}

检查是否已登录的功能

function login_check($mysqli) {
    // Verifica se todas as variáveis das sessões foram definidas 
    if (isset($_SESSION[user_id], $_SESSION[username], $_SESSION[login_string])) {

        $user_id = $_SESSION[user_id];
        $login_string = $_SESSION[login_string];
        $username = $_SESSION[username];

        // Pega a string do usuário.
        //$user_browser = $_SERVER[HTTP_USER_AGENT];

        if ($stmt = $mysqli->prepare("SELECT usuarioSenha FROM usuario WHERE usuarioCod = ? LIMIT 1")) {
            // Atribui "$user_id" ao parâmetro. 
            $stmt->bind_param('i', $user_id);
            $stmt->execute();   // Execute the prepared query.
            $stmt->store_result();

            if ($stmt->num_rows == 1) {
                // Caso o usuário exista, pega variáveis a partir do resultado.                 
                $stmt->bind_result($password);
                $stmt->fetch();
                $login_check = $password;//hash('sha512', $password.$user_browser);

                if ($login_check == $login_string) {
                    return true;
                } else {
                    return false;
                }
            } else {
                return false;
            }
        } else {
            return false;
        }
    } else {
        return false;
    }
}

登录功能

function login($email, $password, $mysqli) {
    // Usando definições pré-estabelecidas significa que a injeção de SQL (um tipo de ataque) não é possível. 
    if ($stmt = $mysqli->prepare("SELECT usuarioCod, usuarioNome, usuarioSenha
        FROM usuario
            WHERE usuarioEmail = ?
            LIMIT 1")) {
        $stmt->bind_param('s', $email);  // Relaciona  "$nusp" ao parâmetro.
        $stmt->execute();    // Executa a tarefa estabelecida.
        $stmt->store_result();

        // obtém variáveis a partir dos resultados. 
        $stmt->bind_result($user_id, $user_name, $user_senha);
        $stmt->fetch();

        // faz o hash da senha com um salt excusivo.
        //$password = hash('sha512', $password);
        if ($stmt->num_rows == 1) {

            if ($user_senha == $password) {
                $_SESSION[user_id] = $user_id;
                $_SESSION[username] = $user_name;
                $_SESSION[login_string] = $user_senha;//hash('sha512', $password.$user_browser);

                return '';
            }
        } else {
            // Tal usuário não existe.
            return '<p class="error"> Não existe esse usuario </p>';
        }
    }else {
        return '<p class="error"> contate o adiministrador </p>';
    }
}

1 个答案:

答案 0 :(得分:0)

我已将这3个功能从my session_start()自定义为sec_session_start() resoveu删除,但我不知道原因。

ob_start();  
session_regenerate_id();
setcookie(session_name(), '', time() + 3600, $params[path], $params[domain], $secure, $httponly);