web-dev-qa-db-ja.com

AJAXリクエストにCookieを設定しますか?

JQuery AJAX PHPへの呼び出しでログインフォームを検証しています。phpでセッションを作成し、[remember me]チェックボックスをオンにした場合は、Cookieを作成します。これがphpコード:

<?php

include '../includes/connection.php';
date_default_timezone_set('GMT');

$name = $_POST['username'];
$pass = $_POST['password'];


$query = mysql_query("SELECT id, username, password FROM users WHERE username = '$name' LIMIT 1");

if(mysql_num_rows($query) == 0) {
 echo 'error';
 exit;
}

while($row = mysql_fetch_array($query)) {

 if($row['username'] == $name && $row['password'] == $pass) {

  session_start();
  $_SESSION['username'] = $row['username'];
  $_SESSION['usrID'] = $row['id'];
  echo 'success';


  if($_POST['remember']) {
   setcookie('username', $row['username'], $exp);
   setcookie('password', $row['password'], $exp);
   setcookie('usrID', $row['id'], $exp);
  }

 } else {
  echo 'error';
  exit;
 }



}


?>

セッションは正常に設定されましたが、Cookieはまったく設定されていません。すべての値(ドメイン、パスなど)を設定しようとしましたが、何も変わりませんでした。私が見逃している明らかなものはありますか?

13
williamg

ここにいくつかの提案があります:

  • 日付の正しい有効期限形式を指定していることを確認してください
  • リダイレクトするページにCookieを設定する場合、Cookieはheader('Location: ....');の呼び出し後に設定する必要があります。例:

    header('Location: http://www.example.com/'); setcookie('asite', $site, time()+60*60, '/', 'site.com');

  • _www.domain.com/path1/path2/_のような人間のURLがある場合、現在のパスだけでなくすべてのパスで機​​能するように、Cookieパスを/に設定する必要があります。

    setcookie('type_id', $new_type_id, time() + 60*60*24*30, '/');

引数の最後の_/_に注意してください。

PHPマニュアルから:

Cookieを利用できるサーバー上のパス。 '/'に設定すると、Cookieはドメイン全体で使用できるようになります。 '/ foo /'に設定すると、Cookieは/ foo /ディレクトリおよびドメインの/ foo/bar /などのすべてのサブディレクトリ内でのみ使用可能になります。デフォルト値は、Cookieが設定されている現在のディレクトリです。

  • setcookie()は、残りのHTTPヘッダーと一緒に送信されるCookieを定義します。他のヘッダーと同様に、スクリプトからの出力の前にCookieを送信する必要があります。つまり、その前にhtml/codeエコーステートメントがあってはなりません。
18
Sarfraz