bon*_*nny 0 html php cookies session
今天我了解了COOKIES和SESSION之间的区别.
现在我想创建一个登录.主要想法如下:
$ip = $_SERVER['REMOTE_ADDR'];
$session_ip = $_SESSION['PHPSESSID']['ip'];
if ( (session_id() === $_COOKIE['PHPSESSID']) && ($ip === $session_id) ){
return (true);
} else {
return (false);
}
Run Code Online (Sandbox Code Playgroud)
我想检查IP就是这样一个,一个用户已经当他登录上次相同的.因此,当使sesion启动时,它会创建$_COOKIE['PHPSESSID']
客户端站点.服务器会将SESSION存储在服务器上的某个位置,并可以识别SESSIONsession_id()
基本上它应该像这部分说的一样:
session_id() === $_COOKIE['PHPSESSID']
Run Code Online (Sandbox Code Playgroud)
现在,probem是将IP保存到该SESSION的部分.
如何访问此SESSION以像处理数组一样处理它?通常我会这样做:
$ip = $_SERVER['REMOTE_ADDR'];
$_COOKIE['PHPSESSID']['ip'] = $ip;
Run Code Online (Sandbox Code Playgroud)
所以我只是将IP保存到客户端站点,$_COOKIE['PHPSESSID']
但是服务器站点的SESSION呢?我如何在那里存储IP?
非常感谢.
将IP保存到会话将非常简单:
session_start(); //near beginning of script
$_SESSION['ip'] = $ip;
Run Code Online (Sandbox Code Playgroud)
比设置ip值后的任何其他页面:
session_start(); //near beginning of script
if(!empty($_SESSION['ip'])) {
// do something with it
}
Run Code Online (Sandbox Code Playgroud)
我想不出你会$_COOKIE['PHPSESSID']
直接使用这个值的任何理由.
我会说虽然我不太明白为什么你需要将这个值存储到会话中,因为它总是可以通过$_SERVER['REMOTE_ADDR']
.
回答评论中指定的用例.您的代码可以像下面这样简单:
session_start(); //near beginning of script
if(!isset($_SESSION['ip'])) {
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
} else if ($_SERVER['REMOTE_ADDR'] !== $_SESSION['ip']) {
// invalid session
// exit program, redirect, or whatever you want to do here
// just make sure you exit script execution
}
// continue with rest of code
Run Code Online (Sandbox Code Playgroud)