ecstore等产品开启缓存-后台及前台不能登录原因-setcookie+session问题

define('WITHOUT_CACHE',false)时后台前台开启缓存-不能登录原因

1、检查这个

app/b2c/lib/frontpage.php

php 复制代码
setcookie($name,$value,$expire,$this->cookie_path,null,false,false);//null-domain要改成nul2025-07-18 16:38:02否则不能登录""

2、

app/base/lib/session.php这个文件要1==1

php 复制代码
<?php

/**

* ShopEx licence

*

* @copyright Copyright (c) 2005-2010 ShopEx Technologies Inc. (http://www.shopex.cn)

* @license http://ecos.shopex.cn/ ShopEx License

*/




class base_session{



private $_sess_id;

private $_sess_key = 's';

private $_session_started = false;

private $_sess_expires = 60;

private $_cookie_expires = 0;

private $_session_destoryed = false;



function __construct()

{

if(defined('SESS_NAME') && constant('SESS_NAME')) $this->_sess_key = constant('SESS_NAME');

if(defined('SESS_CACHE_EXPIRE') && constant('SESS_CACHE_EXPIRE')) $this->_sess_expires = constant('SESS_CACHE_EXPIRE');

}//End Function



public function sess_id(){

return $this->_sess_id;

}



public function set_sess_id($sess_id){

return $this->_sess_id=$sess_id;

}



public function set_sess_expires($minute)

{

$this->_sess_expires = $minute;

}//End Function



private function _get_cache_key(){

if (1==1 || WITHOUT_CACHE===true) {

return $this->sess_id();

}else{

return 'USER_SESSION:'.$this->sess_id();

}

}



private function _get_session(){

if (1==1 || WITHOUT_CACHE===true) {

if (base_kvstore::instance('sessions')->fetch($this->_get_cache_key(), $return)){

return $return;

}else{

return array();

}

}else{

if (cacheobject::get($this->_get_cache_key(), $return)) {

return $return;

}else{

return array();

}

}

}



private function _set_session($value, $ttl){

if (1==1 || WITHOUT_CACHE===true) {

return base_kvstore::instance('sessions')->store($this->_get_cache_key(), $value, $ttl );

}else{

return cacheobject::set($this->_get_cache_key(), $value, $ttl+time());

}

}



public function set_cookie_expires($minute)

{

$this->_cookie_expires = ($minute > 0) ? $minute : 0;

if(isset($this->_sess_id)){

$cookie_path = kernel::base_url();

$cookie_path = $cookie_path ? $cookie_path : "/";

header(sprintf('Set-Cookie: %s=%s; path=%s; expires=%s; httpOnly;', $this->_sess_key, $this->_sess_id, $cookie_path, gmdate('D, d M Y H:i:s T', time()+$minute*60)), true);

}

}//End Function



public function start(){

if($this->_session_started !== true){

$cookie_path = kernel::base_url();

$cookie_path = $cookie_path ? $cookie_path : "/";

if($this->_cookie_expires > 0){

$cookie_expires = sprintf("expires=%s;", gmdate('D, d M Y H:i:s T', time()+$this->_cookie_expires*60));

}else{

$cookie_expires = '';

}

if(isset($_GET['sess_id'])){

$this->_sess_id = $_GET['sess_id'];

if($_COOKIE[$this->_sess_key] != $_GET['sess_id'])

header(sprintf('Set-Cookie: %s=%s; path=%s; %s; httpOnly; ', $this->_sess_key, $this->_sess_id, $cookie_path, $cookie_expires), true);

$_SESSION = $this->_get_session();

}elseif($_COOKIE[$this->_sess_key]){

$this->_sess_id = $_COOKIE[$this->_sess_key];

$_SESSION = $this->_get_session();

}elseif(!$this->_sess_id){

$this->_sess_id = $this->gen_session_id();

$_SESSION = array();

header(sprintf('Set-Cookie: %s=%s; path=%s; %s; httpOnly; ', $this->_sess_key, $this->_sess_id, $cookie_path, $cookie_expires), true);

}

$this->_session_started = true;

register_shutdown_function(array(&$this,'close'));

}

return true;

}



public function close($writeBack = true){

if(strlen($this->_sess_id) != 32){

return false;

}

if(!$this->_session_started){

return false;

}

$this->_session_started = false;

if(!$writeBack){

return false;

}

if($this->_session_destoryed){

return true;

}else{

try {

return $this->_set_session($_SESSION, $this->_sess_expires * 60 * 24);

}catch(Exception $e){



}

}

}



protected function gen_session_id() {

return md5(uniqid('', true).base_request::get_remote_addr().microtime(true).mt_rand(0,9999));

}



public function destory(){

if(!$this->_session_started){

return false;

}

$this->_session_started = false;

$res = $this->_set_session(array(), 1);

if($res){

$_SESSION = array();

$this->_session_destoryed = true;

$cookie_path = kernel::base_url();

$cookie_path = $cookie_path ? $cookie_path : "/";

header(sprintf('Set-Cookie: %s=%s; path=%s; httpOnly;', $this->_sess_key, $this->_sess_id, $cookie_path), true);

unset($this->_sess_id);

return true;

}else{

return false;

}

}



}
相关推荐
舒一笑17 小时前
Ubuntu系统安装CodeX出现问题
linux·后端
华仔啊17 小时前
Java 开发千万别给布尔变量加 is 前缀!很容易背锅
java
叁两17 小时前
用opencode打造全自动公众号写作流水线,AI 代笔太香了!
前端·人工智能·agent
改一下配置文件17 小时前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
golang学习记17 小时前
GitLens 十大神技:彻底改变你在 VS Code 中的 Git 工作流
前端·后端·visual studio code
SuperEugene17 小时前
后台权限与菜单渲染:基于路由和后端返回的几种实现方式
前端·javascript·vue.js
兆子龙17 小时前
WebSocket 入门:是什么、有什么用、脚本能帮你做什么
前端·架构
是一碗螺丝粉17 小时前
LangChain 链(Chains)完全指南:从线性流程到智能路由
前端·langchain·aigc
月弦笙音17 小时前
【浏览器】这几点必须懂
前端