私はそれが質問の後半であることを知っていますが、これが私が見つけた唯一の適切な答えであり、答えが投票されてから人々がそれを使用しようとしているのを見て、私はそれが起こるのを待っているセッションのハックです。だから、このためのソリューション:
define("ENCRYPTION_KEY", "whatever you want to use as key"); // encryption key
if (isset($_COOKIE['SessionEncrypt']) && !empty($_COOKIE['SessionEncrypt'])) {
//echo "get cookie: ".$_COOKIE['SessionEncrypt']; //urldecode(decrypt($_COOKIE['SessionEncrypt'], ENCRYPTION_KEY));
session_id(decrypt(urldecode($_COOKIE['SessionEncrypt']), ENCRYPTION_KEY));
//session_id($_COOKIE['SessionEncrypt']);
}
session_start();
setcookie('SessionEncrypt',urlencode(encrypt(session_id(), ENCRYPTION_KEY)),time()+86400,'/','yourdomain.com'); // will work cross subdomain
は、暗号化/復号化するには、(どこかにここでそれを見つけ、魔法のように動作します):
function encrypt($pure_string, $encryption_key) {
$iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$encrypted_string = mcrypt_encrypt(MCRYPT_BLOWFISH, $encryption_key, utf8_encode($pure_string), MCRYPT_MODE_ECB, $iv);
return $encrypted_string;
}
function decrypt($encrypted_string, $encryption_key) {
$iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$decrypted_string = mcrypt_decrypt(MCRYPT_BLOWFISH, $encryption_key, $encrypted_string, MCRYPT_MODE_ECB, $iv);
return $decrypted_string;
}
この方法では誰もがクッキーにセッションを読み込むことはできません。あなたのブラウザにクッキーを挿入するための天才である必要はありません。これにより、人々はセッションが実際にサーバーから読めることを忘れる傾向があります。あなたのブラウザがそれにアクセスできる場合、他のプログラムも可能です。
ini_setは本当に共有ホストでは問題ありません。(普通は無効ではありません..) – CarpeNoctumDC