2016-06-13 17 views
0

こんにちは私は正常に作成したクッキーを取得しようとしていて、それを文字列と比較しています。Cookieを使用してログインしているかどうかを確認してください

問題は、ユーザーがページに直接アクセスして、すべてのコンテンツが表示され、そのようなことが起こりたくない場合、ユーザーをログインページにリダイレクトすることです。

基本的には「はい」と表示されているだけで、ページが表示され、クッキーがないか、またはnoに設定されていると、ログインにリダイレクトされます。

私はPHPを使用しようとしています。これが私が試みたものです。

<?php 
     $value = "Yes"; 
     if(isset($_COOKIE['user']) && $_COOKIE['user'] == $value) 
     { 
?> 

<!------- HTML code goes here -------> 

<?php 

     } 
     else{ 
      $cookie_name = "user"; 
      $cookie_value = "No"; 
      setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); 
      header("Location: index1.html"); 
     } 

?> 

これは基本的にSQLデータベースで入力された詳細を確認するために呼び出すphpです。

<?php 
    $username = $_POST['username']; 
    $password = $_POST['password']; 

    $conn = mysqli_connect("localhost", "root", "", "accounts"); 
    if (mysqli_connect_errno()){ 
     echo "Error: Could not connect to database. Please try again later"; 
     exit; 
    } 

    $query="SELECT * FROM accounts WHERE username='$username' AND password='$password'"; 

    $result = mysqli_query($conn, $query) 
    or die("Error in query: ". mysqli_error($conn)); 

    $number_of_rows = mysqli_num_rows($result); 

    if($number_of_rows == 1){ 
     $cookie_name = "user"; 
     $cookie_value = "Yes"; 
     setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day 

     header("Location: main.html"); 
     exit; 
    } 
    else{ 
     $cookie_name = "user"; 
     $cookie_value = "No"; 
     setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day 
     header("Location: index2.html"); 
    } 
?> 

誰かがこれを行う方法を理解できますか?私は別のコードを試してみました。私はクッキーを正常に保存しましたが、この部分を解決できないようです。

おかげ

+0

あなたの代わりにクッキーのセッションを行うことができますか? – maria

+0

これは非常に悪い考えで、誰でもそのCookieを手動で設定して、サイトにログインしているふりをすることができます。これにはセッションを使用する必要があります。 – jeroen

+0

クッキー値を「いいえ」に設定しましたが、「はい」でチェックしようとしていますか?理由を知ることができますか? –

答えて

0

セッションは、このための最善の選択肢ですが、クッキーを使用する場合は、代わりに、このためにクッキー、使用サーバ両面セッションを使用してのこの

<?php 

    } 
    else{ 
    $cookie_name = "user"; 
     $cookie_value = "No"; 
     setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); 
     ?> 
     <a href="index1.html">Reload the page</a> 
     <?php 
    } 

?> 
0

を試してみてください:)

<?php 
$value = 'yes'; 

if (isset($_SESSION['user'])) { 
    if ($_SESSION['user'] == $value) { 
     do something.. 
    } 
} 
<?php 
    $value = "Yes"; 
    if(isset($_COOKIE['user']) && $_COOKIE['user'] == $value) 
    { 
?> 

することはようなものになるだろう3210

<?php 

    } 
    else{ 
    $cookie_name = "user"; 
     $cookie_value = "No"; 
     setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); 
     header("Location: index1.html"); 
    } 

?> 

次のようになります。

<?php 

    } 
    else{ 
    $cookie_name = "user"; 
     $cookie_value = "No"; 
     $_SESSION[$cookie_name] = $cookie_value; 
     header("Location: index1.html"); 
    } 

?> 

合計コード:

 <?php 
$value = 'yes'; 

if (isset($_SESSION['user'])) { 
    if ($_SESSION['user'] == $value) { 
     do something.. 
    } 
} else{ 
     $cookie_name = "user"; 
      $cookie_value = "No"; 
      $_SESSION[$cookie_name] = $cookie_value; 
      header("Location: index1.html"); 
     } 

?> 
+0

ねえこのコードを適用しようとしましたが、デバッグコンソールからセッションを削除するとすぐにページに残ります。 –

+0

@ LukeCassar PHPページの上部にある 'session_start()'を使う必要があります。答えには言及しません。マリアはセッションが決して存在しないので、答えとしてこれを陽性として追加するべきです。 – Martin

+0

あなたのコードではい、私はちょうど追加したPHPコードでセッションを追加しました、それは正しいですか? –

0

使用して 'サーバーサイドのセッションを、' @maria状態などから多くのメモリを使用します。あなたのサーバーは頼りになります。できるだけWebページで$ _SESSIONを使用しないでください。

使用この、およびウェブサイトの迅速&乾燥を持つように、ページの読み込みにクッキーの値を読み取る:

if(isset($_COOKIE['user']) { 
    // Save the session_id in the cookie to do your stuff in cookie data. Use explode for multiple values in the cookie. 
    // check the session_id in the cookie on every page load 
    // when not available, recheck, and reset the cookie 
} 
関連する問題