A-A+

ecshop用户自动登录网店的方法

2015年10月20日 PHP开源系统 暂无评论 阅读 17 views 次

ecshop 使用的是 session 来判断用户是否已经登录,如果登录则显示登录的状态,如果没有登录则显示退出的状态,而我们所使用的 360 等浏览器通常是不保存 session 值的,如果一旦关闭掉浏览器,再次打开 ecshop 商店时,是退出的状态,也就是清除了 session 的值,这样显示是不太理想的,在会话状态下除了使用 session 值以外,我们还知道会话记录会保存在本地的C盘下,也就是 cookies 值了,下面夏日博客就来教大家一下,如何在不清除 cookies 会话的状态下让用户自动进行登录。

首先打开 includes/init.php 文件,找到如下的代码:

if (empty($_SESSION['user_id']))
{
if ($user->get_cookie())
{
/* 如果会员已经登录并且还没有获得会员的帐户余额、积分以及优惠券 */
if ($_SESSION['user_id'] > 0)
{
update_user_info();
}
}
else
{
$_SESSION['user_id'] = 0;
$_SESSION['user_name'] = '';
$_SESSION['email'] = '';
$_SESSION['user_rank'] = 0;
$_SESSION['discount'] = 1.00;
if (!isset($_SESSION['login_fail']))
{
$_SESSION['login_fail'] = 0;
}
}
}

接着在全站状态下再搜索一下 $user->logout(); 的方法,可以在 includes/modules/integrates/integrate.php文件中找到如下代码:

function set_cookie($username='', $remember= null )

{

if (empty($username))

{

/* 摧毁cookie */

$time = time() - 3600;

setcookie("ECS[user_id]", '', $time, $this->cookie_path);

setcookie("ECS[password]", '', $time, $this->cookie_path);

}

elseif ($remember)

{

/* 设置cookie */

$time = time() + 3600 * 24 * 15;

setcookie("ECS[username]", $username, $time, $this->cookie_path, $this->cookie_domain);

$sql = "SELECT user_id, password FROM " . $GLOBALS['ecs']->table('users') . " WHERE user_name='$username' LIMIT 1";

$row = $GLOBALS['db']->getRow($sql);

if ($row)

{

setcookie("ECS[user_id]", $row['user_id'], $time, $this->cookie_path, $this->cookie_domain);

setcookie("ECS[password]", $row['password'], $time, $this->cookie_path, $this->cookie_domain);

}

}

}

分别在这两段代码中找到:

$time = time() - 3600;
setcookie("ECS[user_id]", '', $time, $this->cookie_path);
setcookie("ECS[password]", '', $time, $this->cookie_path);

这样的代码片段,注释掉即可,这样当用户将浏览器关闭掉的时候,再次打开还是会显示登录的状态的,只要 cookies 的值不清除这个状态会一直存在,但这样也存在一个隐患,就是当我们在网吧或者不是家庭登录的时候,有可能会泄漏掉自己帐号,所以这里只用作研究使用,不建议使用在站点上,当然我们可以再作一下修改,比如修改 cookies 的生存值等。

标签:

给我留言