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;

}

}



}
相关推荐
爬山算法2 分钟前
Hibernate(74)如何在CQRS架构中使用Hibernate?
java·架构·hibernate
zl_dfq9 分钟前
Linux 之 【进程信号】(signal、kill、raise、abort、alarm、Core Dump核心转储机制)
linux
jjjava2.011 分钟前
深入解析Set与Map的奥秘
java·开发语言
白宇横流学长16 分钟前
基于Java的火车票订票系统的设计与开发
java·开发语言
黎雁·泠崖17 分钟前
Java核心基础API学习总结:从Object到包装类的核心知识体系
java·开发语言·学习
这是个栗子18 分钟前
【Vue代码分析】前端动态路由传参与可选参数标记:实现“添加/查看”模式的灵活路由配置
前端·javascript·vue.js
Yvonne爱编码19 分钟前
JAVA数据结构 DAY1-集合和时空复杂度
java·数据结构·python
Ankie Wan23 分钟前
cgroup(Control Group)是 Linux 内核提供的一种机制,用来“控制、限制、隔离、统计”进程对系统资源的使用。
linux·容器·cgroup·lxc
刘一说27 分钟前
Vue 动态路由参数丢失问题详解:为什么 `:id` 拿不到值?
前端·javascript·vue.js
win x35 分钟前
JavaSE(基础)高频面试点及 知识点
java·面试·职场和发展