• 在smarty模板中取不到Cookie的值解决方案


    在原生PHP中我们用:setcookie()来设置Cookie变量,用$_COOKIE这个全局变量来读取Cookie。例如

    1. if(!isset($_COOKIE['user']))
    2. {
    3. setcookie('user',$userName,time()+60*60*24*300);
    4. }

    在Smarty中,我们可以用她的保留变量来读取:

    1. {$smarty.cookies.user}

    至于用Smarty来设置Cookie变量就没有必要了,那是后端做的事!呵呵。

    但刚才在调试的时候发现,用Smarty的保留变量居然读不到Cookie的值。我的代码是这样的:

    1. <{if$smarty.cookies.loginuser eq ''}>
    2. <a href="view.php?type=login">用户登录</a>
    3. <{else}>
    4. 欢迎:<b><{$smarty.cookies.loginuser}></b>
    5. <{/if}>

    结果始终就是取不到loginuser这个Cookie,一直显示用户登录!

    幸好有Chrome的开发人员工具,查看Ajax的加载的内容,查看元素的CSS等都是非常方便的!如下图:

    点击查看原图

    原来是Path路径不对,最开始没有在setcookie()中加路径参数,直接就是

    1. setcookie('loginuser',$user,time()+30*24*60*60);

    而setcookie()的默认路径是当前目录下,如果其他目录要访问这个Cookie是访问不到的!

    如果该参数设为 '/' 的话,cookie 就在整个 domain 内有效,如果设为 '/foo/',cookie 就只在 domain 下的 /foo/目录及其子目录内有效,例如 /foo/bar/。默认值为设定 cookie 的当前目录。

    改成这样就可以了:

    1. setcookie('loginuser',$user,time()+30*24*60*60,'/');

    虽然这个很简单,其实就是个路径的问题!但仍需要总结两点:

    1.学会用调试工具,及时查看当前变量的情况,看是不是与你预期相符。

    2.学会用Google,学会查手册,求人不如求己!

    好了,我的废话完了!

  • 相关阅读:
    linux中read用法
    apt-get 使用指南
    linux文件系统
    KMP
    在C#中的各种应用
    A*算法,遗传算法
    Dijkstra算法,Floyd算法
    AE开发tips
    TOC 右键菜单
    ubuntu下的一些意外
  • 原文地址:https://www.cnblogs.com/sandea/p/3660272.html
Copyright © 2020-2023  润新知