Cookie を使用するローカルホストで Web サイトを開発しています。データベースに保存され、ユーザーのブラウザーで参照 Cookie として設定されるランダムな 25 文字の文字列を生成する機能があります。
インターネットとこのサイトを検索しましたが、問題の解決策を見つけることができませんでした。
関連コードの概要の下
function generateRandomString($length){
$string = "";
$possible = "012346789abcdefghijklmnopqrstuvwABCDEFGHIJKLMNOPQRSTUVW";
$maxlength = strlen($possible);
if($length > $maxlength){
$length = $maxlength;
}
$i = 0;
while($i < $length){
$char = substr($possible, mt_rand(0, $maxlength-1), 1);
if(!strstr($string, $char)){
$string .= $char;
$i++;
}
}
return $string;
}
$uCookie = generateRandomString(25);
setcookie('uHash', $uCookie, time()+60*60*24*30);
$stmt = $dbh->prepare('
UPDATE User
SET u_UserCookie = :cookie
WHERE u_UserId = :id
');
$stmt->execute(array(
':cookie' => $uCookie,
':id' => $user_id
));
今試してみるとecho($_COOKIE['uHash']);
、空の文字列が得られます。
奇妙な部分は、クロムの設定を確認すると、Cookie が存在することです。
Name: uHash
Content: 134uHnEPrCmBNGqeAjhRSUiJL
Domain: localhost
Path: /~path/to/login
Send for: Any kind of connection
Accessible to script: Yes
Created: Wednesday, April 17, 2013 4:21:27 PM
Expires: Friday, May 17, 2013 4:21:27 PM
文字列「134uHnEPrCmBNGqeAjhRSUiJL」もデータベースにあるため、
(ローカルホスト上の) Cookie に関する基本的な情報が不足していますか?
解決した
問題は、php.netによると
「そのドメイン名には少なくとも 2 つのドット (.) が含まれている必要があるため、「localhost」は無効であり、ブラウザは Cookie の設定を拒否します」
だから私はこれを行うことでそれを解決しました
$domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false;
setcookie('uHash', $uCookie, time()+60*60*24*30, '/', $domain, false);