2009-05-13 11 views
5

イムPHPの非常に新しいとクッキーを使用しようとするが、それは私のサイトでウォーキングされていない、誰も私をしてください導くことができ、何が私のコードで間違って起こっている:クッキーPHPスクリプト内で正しく設定されていないされている

<?php 
session_start(); 
?> 
<script> 
function Redirect(url) 
{ 
location.href = url; 
} 

</script> 
<?php 

define('_VALID_ACCESS', true); 
include_once "includes/connect.php"; 
include_once "includes/login.php"; 


if(empty($_POST['loginname']) || empty($_POST['password'])) 
{ 
    $msg = "User or password is empty"; 
} 
else 
{ 
    if(login($_POST['loginname'], $_POST['password']) == true) 
    { 
     $usern = $_POST['loginname']; 
     session_register('loginname'); 
     $loginname = $usern;   
     sleep(1); 
      if(activestatus($_POST['loginname'], $_POST['password']) == true) 
      { 
      $usern = $_POST['loginname']; 
      session_register('loginname'); 
      $loginname = $usern;   
      sleep(1); 

      $hour = time() + 3600; 
      setcookie("ID_my_site", $_POST['loginname'], $hour); 
      setcookie("Key_my_site", $_POST['password'], $hour); 
      $test = $_COOKIE["ID_my_site"]; 
      $msg = "<script> Redirect ('home.html?testname=".$test."')</script>"; 
      //header("Location: home.html"); 
      } 
      else 
      { 
      $msg = "<script> Redirect ('valid.php?testname=".$usern."')</script>"; 
      } 

    } 
    else 
    { 
     $msg = "<font color=red>User or Password is wrong</font>"; 
    } 
} 
echo '<div id="divTarget">' . $msg . '</div>'; 
?> 
    <link rel="stylesheet" href="css/blueprint/screen.css" type="text/css" media="screen, projection"> 
    <link rel="stylesheet" href="css/blueprint/print.css" type="text/css" media="print"> 
    <link rel="stylesheet" href="css/blueprint/ie.css" type="text/css" media="screen, projection"> 
<body> 
<div class="container" id="login_container"> 
<form id="login" action="action.php" method="post" name="loginform" > 
    <fieldset id="login_screen" style="width:350px"> 
     <label id="login_label" for="login">User Login </label> 
     <br><br> 
     <label for="login">Email Address</label> 
     <input type="text" name="loginname" id="loginname" value="[email protected]">  
     <p id="space"><label for="password">Password</label> 
     <input type="password" id="password" name="password" value="********" ></p> 
     <input type="checkbox">Keep me signed in until i signout 
     <p id="test"><input type="submit" value="Submit"></p> 
     <a href="forgetpassword.html">Forgot 
     your password</a>&nbsp;&nbsp;|<span id="free">Not a member?</span><a href="regForm.html">Sign up</a><blink><span id="free">Free</span></blink> 
     </p> 
    </fieldset> 
</form> </div> 
</body> 
+0

代わりに(あなたはまだそれをMD5なければならない)、彼らはログイン時に変更識別子と使用[ '新しいクッキー($ name)を' ](https://github.com/delight-im/PHP-Cookie/blob/004cde69ec840e65c15275e09b92ecb1da06f357/src/Cookie。php#L51)は、[このスタンドアロンライブラリ](https://github.com/delight-im/PHP-Cookie)にあるように役立ちます。 – caw

答えて

6

電源を入れて、あなたのerror_reportingの設定E_ALLに設定すると、「ヘッダがすでに送信されました」というエラーメッセージが表示されるはずです。すべてのHTMLが送信される前にsetcookie()を呼び出す必要があります。 php.net/setcookieから:

ますsetcookie()HTTP ヘッダーの残りの部分と に沿って送信するクッキーを定義します。他のヘッダーと同様に、 クッキー からの出力(これはプロトコル の制限です)の前にクッキー を送信する必要があります。これを行うには、 タグを含む、すべての出力を にする前に、この関数を呼び出す必要があります。あなたはこのビットを掲示コードブロックで

<script> 
function Redirect(url) 
{ 
location.href = url; 
} 

</script> 

あなたはクッキーを設定しようとする前に、ブラウザのウェルに直接出力されています。

出力バッファリングを使用して、すべてを最後に出力するか、すべての処理コードが1つのスクリプトで最初に実行され、そこに$ _SESSIONとCookieの値を設定する方法に切り替えることが可能ですブラウザに出力されるコードを含む最初のスクリプトの末尾に2番目のスクリプトを含めます。

2

最初にsession_registerは必要ありません。

session_registerは4.1.0以降の好適な方法であるとPHP 5.3

$_SESSION["loginname"] = $_POST["loginname"] 

第二の非推奨ので、あなたがセッションを使用しようとしている場合、これは動作しないので、あなたの流れは、より良いかもしれません。

$_SESSION["foo"] = 1; 
header("Location: stuff.php"); 

その後、stuff.phpのセッションデータを閲覧することはできません。あなたはメインページにユーザーを送り、そこで認証を行うことができ、それが合格すればメインページの読み込みを続行し、そうでなければユーザーをログインに戻しますこのようなページ。

if($_SESSION["authenticated"] == 0) 
{ 
    header("Location: login.php"); 
    die(); 
} 
+0

ちょうどラーニング段階から始めてくれてありがとう。 – jbcedge

+0

stuff.phpがセッションデータを表示できないのはなぜですか?論理的には、stuff.phpがセッション変数 "foo"の値を設定するのではなく、セッションデータにアクセスできるようにしたくないと論理的に仮定していると思います。 –

+0

HTTPヘッダーのリダイレクトを行うと、セッションデータはサーバーに書き込まれません。 session_write_close()のようなものを使ってサーバーに書き込むように具体的に指示しない限り、http://is.php.net/manual/en/function.session-write-close.php –

3

(サイトのルートを指定する)、これを試してみてください:

setcookie("ID_my_site", $_POST['loginname'], $hour,'/'); 

か(自分のログイン名に引用符を追加する)、これを試してください:はdisplay_errors上

setcookie("ID_my_site", "$_POST['loginname']", $hour,'/'); 
1

また、パスワードを保存しないでください。クッキーデータです。これは大きなセキュリティです。いいえいいえ!

あなたはそれがユニークな設定のような何かをしたい場合は - ランダム - あなたが見つけるかもしれない

関連する問題