我将创建一个登录屏幕。所以,如果用户输入了正确的用户名和密码,我将创建一个这样的会话:
session_start();
$my_session_id = session_id(md5("user's remote ip address") );
那么我将把$my_session''id保存回用户表中。
每次加载页面时,我都会对照数据库中的字段检查session_id(),以验证会话是否良好。
假设数据库是安全的,代码是否足够好和安全?
**编辑:好吧,我知道它不安全,但这个呢:
session_start();
session_id();
session_regenerate_id(true);
$new_session_id = session_id();
//save the new_session_id into table
set $_SESSION['user_ip'] = user's remote ip
然后在每页上对照数据库字段检查$_SESSION['user_ip']和SESSION_id
它足够好吗?**
不,根本不是。我可以为任何IP重新创建会话id,从而劫持任何会话。只需保留默认session_id,确保在登录时始终重新生成它(以防止会话固定攻击),并将IP与会话一起存储,以验证会话是否真正属于用户。
不,它根本不安全。你为什么要这么做?如果您想将会话绑定到IP地址,请将IP存储在会话变量中并进行检查。
当您启动会话时,它已经创建了自己的会话id。不建议创建自己的会话。
若要将其存储在表中,可以通过$sessionId = session_id();
获取并存储在表内。它会更好。
有关更多信息,您可以访问:http://in3.php.net/session_id
您应该检查是否有动态IP 的用户