我有一个有两个用户的php登录。一切似乎工作正常但我随机启动并需要重新登录。我的想法是我的会话超时?有时有两个人同时使用相同的登录。任何想法
<?php //login code
session_start();
if(isset($_POST['user']))
{
$password = $_POST['pass'];
$user = $_POST['user'];
if ( $password == "pass" && $user == "user") {
$_SESSION['phplogin'] = true;
header('Location: index.php');
exit;
} else {
if(isset($_POST['user']))
{
$password = $_POST['pass'];
$user = $_POST['user'];
if ( $password == "pass2" && $user == "user2") {
$_SESSION['phplogin'] = true;
header('Location: index2.php');
exit;
}
}
?>
// ===
<?php // approval code
session_start();
if (!isset($_SESSION['phplogin'])
|| $_SESSION['phplogin'] !== true) {
header('Location: login.php'); //Replace that if login.php is somewhere else
}
<?php // index code
include('approve.php');
include('connect.php');
?>
答案 0 :(得分:2)
您可以尝试使用PHP函数来获取/设置会话ID。您还可以根据需要设置Cookie参数:session_set_cookie_params(31536000, '/', 'your.cookiedomain');
(更多信息:http://www.php.net/manual/en/function.session-set-cookie-params.php)
答案 1 :(得分:0)
首先,你的代码是一个小错误,所以不好帮助你排序,如果你做硬编码凭证,那么最好保持用户/传递一个数组,这样你就不必为每个用户重写你的代码
创建一个名为accounts.php
的文件并粘贴以下代码段
<?php
return array(
"username" => "password"
/*.. More Below ..*/
);
?>
然后是您的登录代码:
<?php
session_start();
if(!empty($_POST['user']) || !empty($_POST['pass']))
{
$users = require('accounts.php');
$pass = $_POST['pass'];
$user = $_POST['user'];
//loop the accounts.
foreach($users as $_username => $_password)
{
if(strcmp($user,$_username) === 0 && strcomp($pass,$_password) === 0)
{
//Valid Account
$_SESSION['phplogin'] = true;
header('Location: index.php');
exit;
}
}
?>
这应该足够了,
有关注销的问题可能是由于到期时间不活动,如果请求未从客户端进入服务器,则会话垃圾收集器将在会话过期时删除该会话。
您可以在以下链接中查看更多内容,包括其工作原理以及如何更改值:
How do I expire a PHP session after 30 minutes?
如果您想为每个成员设置自定义条件,例如静态配置文件数据,路由信息,则需要您将数组增加1维以及进行小型重组,因此您的帐户页面如下所示:
<?php
return array(
array(
"username" => "the_username",
"password" => "the_password",
"after_login" => "home.html"
)
/* More Below */
);
?>
然后您的登录代码会稍微更改以适应相应的内容。
<?php
session_start();
if(!empty($_POST['user']) || !empty($_POST['pass']))
{
$accounts = require('accounts.php');
$pass = $_POST['pass'];
$user = $_POST['user'];
//loop the accounts.
foreach($accounts as $account)
{
if(strcmp($user,$account['username']) === 0 && strcomp($pass,$account['password']) === 0)
{
//Valid Account
$_SESSION['phplogin'] = true;
header('Location: ' . $account['after_login']);
exit;
}
}
?>
如果你不确定我的意思是尺寸,这是一个简单的例子:
$array[0][1][10]['username']
/* | | | |
| | | |
1 2 3 4 > dimension
*/
这允许第3维的值始终绑定到2,然后绑定到1
希望这有帮助。