我想知道开发人员如何专业地维护不同php文件之间的会话,因为用户可以浏览网站。
我已经看过所有教程,但我认为它们并不安全。
我刚刚创建了一个登录php文件,并创建了与userid,数据库中的用户名相关联的会话,如果记得我已经选中,它将创建一个cookie。
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$rememberMe = (int)$_POST['rememberMe'];
$row = mysql_fetch_assoc(mysql_query("SELECT id,usr FROM members WHERE usr='{$username}' AND pass='".md5($password)."'"));
if($row['usr'])
{
$_SESSION['usr']=$row['usr'];
$_SESSION['id']=$row['id'];
$_SESSION['rememberMe']=$_POST['rememberMe'];
if($rememberMe=="on")
setcookie('zsCookie',$username, time()+7200);
}
现在让我们说,我制作个人资料php。如何获得用户会话?我想知道开发人员在Facebook这样的网站上如何做到这一点的专业方式。获得此会话后,我如何使用它以完全安全的方式从我的数据库中检索值。
我的验证码是否可以安全地从sql注入?
答案 0 :(得分:1)
您通常采用的方式是使用SESSIONS。
你可以做:
session_start();
在脚本的开头,然后使用:
$_SESSION['userid'] = $myuserid;
然后,当页面加载回来时,再次启动start_session()并查看$ _SESSION以查看您的用户ID是否存在。如果存在,请使用该用户ID从数据库加载用户数据。
例如:
'SELECT * FROM users_table WHERE id = '.$_SESSION['userid'];
请注意,您应该实现更多有关安全性的注意事项,请在php.net中查找会话部分以获取更多信息:
祝你好运答案 1 :(得分:1)
您的查询对SQL注入是安全的,尽管对$ _POST ['password']的mysql_real_escape_string调用是不必要的,因为当通过md5()运行时,输出将只包含字母数字字符并且不能包含SQL命令。
至于会议,这是另一回事。许多PHP开发人员通过使用在每个需要支持会话的页面上调用session_start()等函数来使用PHP的默认会话,并在$ _SESSION超全局中存储需要在每个页面上的信息。查看此处的会话的PHP文档:http://us3.php.net/manual/en/book.session.php
话虽如此,自定义会话实现可以实现更高的安全性和效率,但这需要更多的工作。
答案 2 :(得分:1)
你使用session_start()
继续你的生活。
您的特定查询是安全的,但是要意识到当您通过md5运行字符串时,您在原始字符串上执行的任何SQL转义都会被销毁 - md5的输出字符集不包含sql元字符,因此如果用户的密码包含任何对于元字符,您现在不仅已经对其密码进行了哈希处理,而且还添加了任何转义字符。您必须执行此操作,无论您何时进行密码操作,否则您将最终获得特定用户PW的一个位置将无法工作,因为他们碰巧在pw中有一个SQL元数据。