我有一个定制的网上商店,我使用PHP SESSION来存储客户选择的产品,数量和其他选项。选定的产品和选项通过jQuery AJAX发送到后端,PHP接管,它是否检查(如果产品可用,甚至存在并且剩余的数量足够),然后它存储或更新存储在里面的数据SESSION。当客户试图进行购买时,在某些情况下会失去SESSION,我不知道为什么。我确实搜索了答案/解决方案很长一段时间,我也尝试了一些解决方案,其中没有一个100%工作,会话仍在丢失。我找到了确切的地方,无法解决它。
部分代码:
重定向发生在jQuery&$.ajax()
调用window.location.href='/url/'
内(网址有效,存在并且与调用页面位于同一个域中)
这是我的jQuery代码:
$('body').on('submit','#some-form-name',function(e){
e.preventDefault();
var el=$(this);
$.ajax({
type:'post',
dataType:'json',
url:'/include/process-sl.php',
data:el.serialize()+'&q=updateBasket',
beforeSend:function(){
... some checks to verify if form should be submitted or an friendly error returned
},
success:function(json){
if(json.success==true){
... show friendly success message before redirecting
setTimeout(function(){
if(json.payment!=undefined){
if(json.payment=="paypal"){
window.location.href='https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token='+json.token
}else{
window.location.href='/nakup-opravljen/'
}
}
},1000);
}else{
... shows friendly error message
}
},
error:function(){
... ajax call failed, show error message
}
})
});
主要PHP文件的启动方式(index.php,process-sl.php):
session_set_cookie_params(172800);
session_start();
session_save_path('/home/cheapand/tmp/sessions/');
ini_set("log_errors" , "1");
ini_set("error_log" , "logs/index.php.log");
ini_set("display_errors" , "0");
处理数据的PHP代码有点长(但如果要求将粘贴它),基本上它只是更新SESSION中的数据(我不是第一次这样做,所以我假设没有错误,特别是因为它大部分时间都有效)并返回成功/错误,选择的付款类型以及PayPal令牌。
我做了什么:
session_set_cookie_params(172800);
你们(和女孩)有没有其他建议要检查或尝试什么?