如何在PHPSESSID中存储IP?

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?

非常感谢.

Mik*_*ant 5

将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)