2017-12-01 4 views
0

セクションを保存するためのカスタムコードを作成しました。私はまもなくページに戻り、セッションが保存され、ログインが成功として返されます。私のセッションは他のページに残っていません

しかし、私はこのページのフォームから情報を保存しようとしていますが、私がログインしているかどうかを確認して、失敗したとして返されます。

ログインしてログインを確認する別のページにナビゲートすると、セッションtbmは保持されません。

誰でも可能なことを知っていますか、または私がこれらの機能に欠けているものを見つけられますか?

方法は、ログイン後に、これは

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; 
    } 
} 
にログインしているかどうかを確認する

<? 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($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>'; 
    } 
} 
+0

各ページに 'session_start()'がありますか? –

+0

はい、各ページに「sec_session_star()」という関数があります。そこには、「session_start()」が含まれています。 'session_start()'だけを試しても動作しないか、ログインすることはできません。個人ログオン機能で –

+0

を2回セッションを開始すると、それはなぜですか? – Niels

答えて

0

私はsec_session_start() resoveuに合わせてカスタマイズmy session_start()からこれらの3つの機能を削除したが、私は理由を知りません。

ob_start(); 
session_regenerate_id(); 
setcookie(session_name(), '', time() + 3600, $params[path], $params[domain], $secure, $httponly); 
関連する問題