1

「ログインしたままにする」を追加しようとしています。私が何を間違っているのか正確にはわかりませんが、「ログインしたままにする」がチェックされているときの最初のログインで、これは実行されます:

$email_and_password = array($email_from_html, $pass_from_html);
setcookie("StayLoggedZod", $email_and_password, time()+3600*24*30);

$email_from_htmlと$pass_from_htmlは、配列に保存されているユーザーの電子メールとパスワードであり、Cookieに保存されています。

これで、離れた後にサイトに戻ると、最初のページで次のようになります。

if (isset($_COOKIE['StayLoggedZod'])) 
{
$email_and_password = $_COOKIE['StayLoggedZod'];
$stored_email = $email_and_password[0];
$stored_password = $email_and_password[1];
//USES THE E-MAIL AND PASS STORED IN HERE TO LOG INTO WEBSITE VIA MySQL DB, I EXCLUDED THIS CODE BECAUSE I KNOW THIS PART WORKS.
}
else
{
header("location:login.php");
}

エラーは返されません。動作させることができなかったので、次のような簡単なテストページを作成しました。

$cookie_data = $_COOKIE['StayLoggedZod'];
$the_email = $cookie_data[0];
$the_pass = $cookie_data[1];
$display_string = "This is my email".$the_email.". This is my password".$the_pass;
echo $display_string;

「これは私のメールです」などを除いて、データは表示されません。

何が欠けているのかわからないので、ログインを維持するのはこれが初めてです。説明が徹底されていることを願っています。-マイク

4

3 に答える 3

2

1)パスワードなどの機密情報をCookieに保存しないでください。Cookieはクライアント側に保存され、編集および表示できます

2)setcookiehttp ://php.net/setcookieのマニュアルページを確認します。

2番目のパラメーター(格納する値)は文字列である必要があることがわかります(したがって、配列を格納する場合は、シリアル化やjsonエンコーディングなどの文字列として配列を格納する方法を考えてください)

于 2012-06-05T10:57:24.627 に答える
1

これを試して:

setcookie("StayLoggedZod", serialize($email_and_password), time()+3600*24*30);

呼び出します:

$email_and_password = unserialize($_COOKIE['StayLoggedZod']);
于 2012-06-05T10:58:20.617 に答える
1

永続的なログインCookieの最初のルールは次のとおりです。パスワードをCookieに保存しないでください。

代わりに、ユーザー名とランダムトークン(適切な大きさのスペースから)を使用してCookieを生成し、このランダムトークンをユーザーテーブル内に保存します。

Cookieが提示されると、ユーザー名とトークンの組み合わせが検索されます。

  • 組み合わせが一致する場合、ユーザーはサインインしています。新しいトークンが生成されて保存され、Cookieが更新されます
  • 組み合わせが一致しない場合、Cookieは無視されます

「rememberme」Cookieの結果としてユーザーセッションが開始された場合、ユーザーが機密情報(個人を特定できるデータなど)にアクセスするときにパスワードの入力を求める必要があります。

ここで概説するように、侵害されたCookieを処理するこのプロセスに改善があります。

于 2012-06-05T11:11:46.840 に答える