有一个数据展示列表,通过点击tag来切换不同状态间的数据
+--------+--------+------+------+
| 未审核 | 审核中 | 执行 | 结单 |
+--------+--------+--------+--------+--------+
| Field1 | Field2 | Field3 | Field4 | Field5 |
+--------+--------+--------+--------+--------+
| data11 | data12 | data13 | data14 | data15 |
...
...
...
+--------+--------+--------+--------+--------+类似这样的表格,通过点击上方的tag来切换显示不同数据,为了其中状态、分页、排序都用COOKIE来记录前台JS操作COOKIE写入成功,而且我查看本地COOKIE文件也是正确的
但是,后台PHP读取COOKIE时,有时候成功,有时候失败...
说失败也不正确,而是它老是读取到同一个旧的COOKIE,但实际上COOKIE早就被JS重写了啊...
比如我点击“审核中”status=2,本地COOKIE也成功写入了
但PHP后台获取到的COOKIE数据 status=4
出现这错误时,不管点哪个tag都没用,显示的数据没变,但我后台跟踪数据库查询,确实每次点击tag都会查询一次数据库
但数据库查询中,那个status字段一直是4...
于是跟踪$_COOKIE数组,发现这数组里的数据一直没变,即使前台JS已经改变COOKIE的数据了...
但是.......如果点击任何tag都返回相同数据时(也就是出现上面说的错误时),只要刷新一下页面,表格数据就正确了...但再点任意一个tag,它显示的数据又变成status=4时的数据了...这错误也不是每次都出现...我之前一次遇到是我同时打开2个窗口,然后把2个窗口都关掉再开就正常了,但这次却是无缘无故突然这样,即使把全部窗口都关闭了依然这样...
我调试时是通过http://computername/xxx这样的路径来访问,而不是域名的形式,会跟这有关吗??
+--------+--------+------+------+
| 未审核 | 审核中 | 执行 | 结单 |
+--------+--------+--------+--------+--------+
| Field1 | Field2 | Field3 | Field4 | Field5 |
+--------+--------+--------+--------+--------+
| data11 | data12 | data13 | data14 | data15 |
...
...
...
+--------+--------+--------+--------+--------+类似这样的表格,通过点击上方的tag来切换显示不同数据,为了其中状态、分页、排序都用COOKIE来记录前台JS操作COOKIE写入成功,而且我查看本地COOKIE文件也是正确的
但是,后台PHP读取COOKIE时,有时候成功,有时候失败...
说失败也不正确,而是它老是读取到同一个旧的COOKIE,但实际上COOKIE早就被JS重写了啊...
比如我点击“审核中”status=2,本地COOKIE也成功写入了
但PHP后台获取到的COOKIE数据 status=4
出现这错误时,不管点哪个tag都没用,显示的数据没变,但我后台跟踪数据库查询,确实每次点击tag都会查询一次数据库
但数据库查询中,那个status字段一直是4...
于是跟踪$_COOKIE数组,发现这数组里的数据一直没变,即使前台JS已经改变COOKIE的数据了...
但是.......如果点击任何tag都返回相同数据时(也就是出现上面说的错误时),只要刷新一下页面,表格数据就正确了...但再点任意一个tag,它显示的数据又变成status=4时的数据了...这错误也不是每次都出现...我之前一次遇到是我同时打开2个窗口,然后把2个窗口都关掉再开就正常了,但这次却是无缘无故突然这样,即使把全部窗口都关闭了依然这样...
我调试时是通过http://computername/xxx这样的路径来访问,而不是域名的形式,会跟这有关吗??
解决方案 »
- 一个php的小问题。
- PHP上传文件到服务器脚本问题
- AJAX UTF-8 编码问题,大家看看,真心实意给分请教
- 问个问题啊,关于位操作符的
- 有懂htaccess的人么 进来看看 子域名简单问题
- define定义的常量与字符串连接
- 再问一下:一个正则表达式,表达一个字符串中不含"abc",如何写啊?
- 谁有南京大汉网络公司的网站发布软件大汉版通的 谁有南京大汉网络公司的网站发布软件大汉版通的源码提供 提供(很棒的发布系统)
- 用md5()函数怎样实现对信息加密?
- 关于smarty取oracle数据数组后传递时,只取每个字段第一个字符的问题
- 关于正则表达式 脚本之间变量传递问题
- 有关PHP引用,这个怎么打印不出来
但......出现这个错误的几率不高哦...上面说过我有一次打开2个窗口导致过这问题
但是我想重现的时候,打开N个窗口都没这问题...
PHP部分代码ob_start();
if(isset($_POST['pl'])) {
$pl = (Array)json_decode($_POST['pl']);
print_r($pl);
log_debug("set post pl = ".ob_get_clean());
foreach($pl as $key => $val) setcookie("pl[".$key."]", $val, time()+31536000);
} else {
if(isset($_COOKIE['pl'])) {
$pl = $_COOKIE['pl'];
print_r($pl);
log_debug("no set post but set cookie pl = ".ob_get_clean());
} else {
$pl = array(
"esc" => 1,
"status" => 5,
"now" => 1,
"order" => "bill_date"
);
print_r($pl);
log_debug("not post not cookie pl = ".ob_get_clean());
foreach($pl as $key => $val) setcookie("pl[".$key."]", $val, time()+31536000);
}
}下面则是捕获到的部分日志
11-01-22 11:08:31 set post pl = Array
(
[esc] => 1
[status] => 3
[now] => 1
[order] => bill_date
)11-01-22 11:08:33 set post pl = Array
(
[esc] => 1
[status] => 9
[now] => 1
[order] => bill_date
)11-01-22 11:09:05 set post pl = Array
(
[esc] => 0
[status] => 9
[now] => 1
[order] => in_qty
)// 注,上面这些操作都是在列表里,然后在这里我双击显示某行的详细信息,页面跳转了
// 然后我再在跳转后的页面里点击里面的“返回列表”链接
// 但返回后,COOKIE却变成下面这样了,照理说pl数组的数据应该是和上面一样才对啊11-01-22 11:10:01 no set post but set cookie pl = Array
(
[esc] => 1
[status] => 5
[now] => 1
[order] => bill_date
)
if(isset($_POST['pl'])) {
$pl = (Array)json_decode($_POST['pl']);
echo "pl = ";
print_r($pl);
foreach($pl as $key => $val) {
if(!setcookie("pl[".$key."]", $val, time()+31536000)) echo "setcookie error.".PHP_EOL;
}
echo "cookie = ";
print_r($_COOKIE['pl']);
log_debug("set post ".ob_get_clean());
} else {
if(isset($_COOKIE['pl'])) {
$pl = $_COOKIE['pl'];
print_r($pl);
log_debug("no set post but set cookie pl = ".ob_get_clean());
} else {
$pl = array(
"esc" => 1,
"status" => 5,
"now" => 1,
"order" => "bill_date"
);
print_r($pl);
log_debug("not post not cookie pl = ".ob_get_clean());
foreach($pl as $key => $val) setcookie("pl[".$key."]", $val, time()+31536000);
}
}
结果从输出的日志来看,COOKIE写入失败啊...11-01-22 11:23:02 no set post but set cookie pl = Array
(
[esc] => 1
[status] => 5
[now] => 1
[order] => bill_date
)11-01-22 11:23:07 set post pl = Array
(
[esc] => 1
[status] => 8
[now] => 1
[order] => bill_date
)
cookie = Array
(
[esc] => 1
[status] => 5
[now] => 1
[order] => bill_date
)11-01-22 11:23:14 set post pl = Array
(
[esc] => 1
[status] => 9
[now] => 1
[order] => bill_date
)
cookie = Array
(
[esc] => 1
[status] => 5
[now] => 1
[order] => bill_date
)但....下面是我机器上的COOKIE信息pl[esc]
1
ma2jiajia-pc/pact/index/
1024
752418048
30202037
3025504144
30128611
*
pl[status]
9
ma2jiajia-pc/pact/index/
1024
752418048
30202037
3025504144
30128611
*
pl[now]
1
ma2jiajia-pc/pact/index/
1024
752418048
30202037
3025504144
30128611
*
pl[order]
bill_date
ma2jiajia-pc/pact/index/
1024
752418048
30202037
3025504144
30128611
*
从COOKIE文件来看,确实是写入成功了啊...为什么PHP获取到的COOKIE就是失败呢??
后来把所有COOKIE都删除了,经过追踪...发现....path错了...
我默认没传递path参数,结果...列表操作写入到ma2jiajia-pc/pact/index,而PHP后台里获取到的COOKIE却是ma2jiajia-pc的COOKIE信息...