我发现这个问题#2的来源。它是利用了session_register(富)的。成立了以会话的登录系统,PHP
我把以下内容添加到我的handle_registration.php。
session_register("foo");
session_register("foo2");
$foo2 = $_POST['email'];
$foo['email'] = $_POST['email']
问题仍然存在,因为没有变量存储到我的会话cookie中。
这是我的login script的逻辑。
- 解决了Pascal Martin和The Disintegrator:这是把功能
session_write_close
中产生的登录会话的正确的地方? - 你怎么能得到一个永久的会话用户“会话”,使得一个新的会话没有启动,每次的index.php加载?
我的session_start()
在我的index.php
的开头。
我的index.php之初
session_start();
if($_SESSION['logged_in'] == false) {
$random_number = rand(1,100000);
session_id($random_number);
session_id['email'] = '';
}
,而我的index.php的尽头
<?php
session_write_close(); // Session code ends here!
?>
我的会话代码验证的最开始之后有用户密码过程由
$dbconn = pg_connect("host=localhost port=5432 dbname=masi user=masi password=123");
$result = pg_prepare($dbconn, "query22", "SELECT passhash_md5 FROM users
WHERE email=$1;");
$passhash_md5 = pg_execute($dbconn, "query22", array($_REQUEST['email']));
// users from registration/login form
if ($passhash_md5 == md5($_REQUEST['password'])) {
$_SESSION['logged_in'] = true;
$_SESSION['email'] = $_REQUEST['email'];
$_SESSION['passhash_md5'] = md5($_REQUEST['password']);
}
// this may be unnecessary if the passhash_md5 cannot be changed by the user
$passhash_md5_2 = pg_execute($dbconn, "query22", array($_SESSION['email']));
// users staying in the site
if ($passhash_md5_2 == $_SESSION['passhash_md5'])) {
$_SESSION['logged_in'] = true;
}
该代码会生成持续的随机会话,从而不会为用户保存任何用户的数据。 我在我的代码$_SESSION
更换登录/注册处理程序后每个$_REQUEST
,因为$_REQUEST
不包括$ _SESSION - 仍然是同样的问题,我无法看到用户名登记/登录后的首页。
谢谢你解决第一个问题! – 2009-08-13 05:08:06
不客气:-)我已经编辑了几个更多想法的答案;也许他们也会帮忙...... – 2009-08-13 05:53:54
谢谢你对第二次更新的解释! - 我实施了改进建议。该网站连续不断地生成会话ID,以便用户的数据不会传输到下一页。 – 2009-08-13 13:44:25