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;

}

}



}
相关推荐
LVZ2 分钟前
用了半年 AI 写代码,最烦的不是代码,是环境
前端·后端·开源
polaris_tl2 分钟前
一行 `compress: false`,为什么让 SSE 首包恢复实时返回
前端
海边的云4 分钟前
别再让 AI 瞎改代码:一套让大模型「收敛」的前端专家 Skill》
前端
kisshyshy4 分钟前
给端侧大模型装上“发动机”:React 合成事件 + 进度条组件全解
前端·react.js·node.js
时空无限13 分钟前
vllm 大模型启动缓存相关环境变量 export
linux·缓存·vllm
hunterandroid16 分钟前
DataStore 工程化实践:迁移、并发更新与异常恢复
android·前端
晓说前端16 分钟前
TypeScript 核心语法进阶 —— 字面量类型与类型推论
前端·typescript
独隅20 分钟前
IntelliJ IDEA 接入多种AI大模型插件终极指南(2026.1 企业合规版)
java·人工智能·intellij-idea
Echo_cy_21 分钟前
基于ZYNQ-7000的Ethernet驱动配置
linux·驱动开发·嵌入式硬件·fpga开发·ethernet·zynq
ShineWinsu36 分钟前
对于Linux:模版方法类的解析以及socket、TcpSocket的封装
linux·c++·面试·socket·模板方法模式·封装·tcpsocket