页面跳转时中间参数保存(memcache/cookie)

2014年1月19日 17:30:27

情景: 客服在后台操作的时候,经常从列表页进入到编辑页,编辑完信息后,还要自动返回之前的列表页

问题:

1.如果客服是从列表第二页跳转到编辑页面,那么编辑完成后应该会自动跳转到列表页的第二页,这样就牵扯到这个"第二页"的参数的保存问题

2.如果是多个页面一层层深入,那么中间参数保存是很浪费脑细胞的

方案:

之前想过两种方法:一是用smarty模版插件保存,二是:用程序保存.但这都会使程序中徒添很多与逻辑无关的代码,跳转赋值保存非常麻烦

现在又想起了两种方法:

前提:用PHP数组模拟"栈",将客服操作的URL用栈保存下来

第一种方案:用cookie/session保存这个"栈",达到跳转间保存URL的目的(建议使用)

第二种方案:用memcache保存这个栈(或者用其他nosql直接使用其栈的功能)

我刚刚实现了用memcache保存栈的目的,用cookie和session也一样

优缺点:

cookie/session可以设置expire=0(有效期)来保证客服关闭浏览器后清除所有操作历史,也可以设置expire来设置保存URL历史的时间

选用memcache没什么优点,只是我在一开始想到了用memcache来实现这个功能,后来代码写完了,才想起来cookie/session方案,不过原理都一样

缺点:栈内只保存了URL,也就是说只能保存get中间参数,对于中间参数有post的就不能记录了

下边贴出memcache测试代码:

页面跳转时中间参数保存(memcache/cookie)
 1 <form method="post">
 2     <input type="submit" name="submit" value="ok !">
 3 </form>
 4 <?php
 5 $m = new Memcache();
 6 $m->connect(‘localhost‘, ‘11211‘);
 7 
 8 //栈的有效期为从现在开始今天的剩余时间
 9 $tomorrow = strtotime(‘tomorrow‘);
10 $now = time();
11 $expire = $time_remaind = $tomorrow-$now;
12 
13 if (!empty($_POST[‘submit‘])) {
14     $url_refer = out($m, $expire);
15     if ($url_refer) {
16         header("Location: http://$url_refer");
17         exit;
18     }
19 } else {
20     in($m, $expire);
21 }
22 
23 //入栈
24 //判断是刷新的话不再将当前URL记入栈
25 function in($m, $expire)
26 {
27     $url_now = $_SERVER[‘HTTP_HOST‘].$_SERVER[‘REQUEST_URI‘];
28 
29     $jsonStack = $m->get(‘zzb‘);
30     if (empty($jsonStack)) {
31         $arrStack = array();
32         $arrStack[] = $url_now;
33     } else {
34         $arrStack = json_decode($jsonStack, true);
35         $url_refer = array_pop($arrStack);
36         if ($url_refer == $url_now) {
37             $arrStack[] = $url_refer;
38         } else {
39             $arrStack[] = $url_refer;
40             $arrStack[] = $url_now;
41         }
42     }
43         $jsonStack = json_encode($arrStack);
44         $m->set(‘zzb‘, $jsonStack, MEMCACHE_COMPRESSED, $expire);
45 }
46 
47 //出栈
48 //如果没有获得来源URL,则还是跳转到本页面
49 function out($m, $expire)
50 {
51     $jsonStack = $m->get(‘zzb‘);
52     if (empty($jsonStack)) {
53         echo ‘empty stack<br>‘;
54     }
55     $arrStack = json_decode($jsonStack, true);
56 
57     $url_now = array_pop($arrStack);
58     $url_refer = array_pop($arrStack);
59 
60     $jsonStack = json_encode($arrStack);
61     $m->set(‘zzb‘, $jsonStack, MEMCACHE_COMPRESSED, $expire);
62 
63     return $url_refer;
64 }
View Code

html 按钮表示进入此页操作完成后,提交返回

下边是cookie的测试代码:

页面跳转时中间参数保存(memcache/cookie)
 1 <?php
 2 ob_start();
 3 if (!empty($_POST[‘submit‘])) {
 4     $url_refer = out();
 5     if ($url_refer) {
 6         header("Location: http://$url_refer");
 7         exit;
 8     }
 9 } else {
10     in();
11 }
12 
13 //入栈
14 //判断是刷新的话不再将当前URL记入栈
15 function in()
16 {
17     $url_now = $_SERVER[‘HTTP_HOST‘].$_SERVER[‘REQUEST_URI‘];
18 
19     $jsonStack = empty($_COOKIE[‘zzb‘]) ? ‘‘ : $_COOKIE[‘zzb‘];
20     if (empty($jsonStack)) {
21         $arrStack = array();
22         $arrStack[] = $url_now;
23     } else {
24         $arrStack = json_decode($jsonStack, true);
25         $url_refer = array_pop($arrStack);
26         if ($url_refer == $url_now) {
27             $arrStack[] = $url_refer;
28         } else {
29             $arrStack[] = $url_refer;
30             $arrStack[] = $url_now;
31         }
32     }
33 echo ‘<pre>‘;
34 print_r($arrStack);
35         $jsonStack = json_encode($arrStack);
36         setcookie(‘zzb‘, $jsonStack);
37 }
38 
39 //出栈
40 //如果没有获得来源URL,则还是跳转到本页面
41 function out()
42 {
43     $jsonStack = empty($_COOKIE[‘zzb‘]) ? ‘‘ : $_COOKIE[‘zzb‘];
44     if (empty($jsonStack)) {
45         echo ‘empty stack<br>‘;
46     }
47     $arrStack = json_decode($jsonStack, true);
48 
49     $url_now = array_pop($arrStack);
50     $url_refer = array_pop($arrStack);
51 echo ‘<pre>‘;
52 var_dump($url_refer, $url_now);
53 print_r($arrStack);
54 
55     $jsonStack = json_encode($arrStack);
56     setcookie(‘zzb‘, $jsonStack);
57 
58     return $url_refer;
59 }
60 ?>
61 <form method="post">
62     <input type="submit" name="submit" value="ok !">
63 </form>
View Code

页面跳转时中间参数保存(memcache/cookie)

上一篇:DataSocket简介


下一篇:在类似qq或者微信聊天中。如何根据不同的手机发送图片