在原生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,学会查手册,求人不如求己!

好了,我的废话完了!

在smarty模板中取不到Cookie的值解决方案的更多相关文章

  1. ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案

    好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...

  2. SMARTY模板中如何使用get,post,request,cookies,session,server变量

    {$smarty}保留变量不需要从PHP脚本中分配,是可以在模板中直接访问的数组类型变量,通常被用于访问一些特殊的模板变量.例如,直接在模板中访问页面请求变量.获取访问模板时的时间戳.直接访问PHP中 ...

  3. 在smarty模板中使用PHP函数的方法

    在smarty模板中如果要在显示的资料使用php函数时,如果是只有一个参数的函数比如说去空白的trim会写成 sample1 代码如下: <{$colname|trim}> 那如果使用像i ...

  4. 在smarty模板中截取指定长度的字符串

    在smarty模板中截取指定长度的字符串,可使用truncate这个插件. 用法: {{$data.value|truncate:28:'...'}} 28个字节14个字数输出,多余部分输出...,一 ...

  5. smarty模板中引用常量没效果

    在thinkphp框架中使用Thinkph的模板引擎,css,js等都没问题,配置为smarty模板引擎后没效果,如图 代码为,$Smarty的s是大写,此时页面不能引入常量,改为小写后正常了. &l ...

  6. [smarty] 在smarty模板中使用smarty变量初始化 javascript 变量的问题

    // 总结:// 1/ 在smarty 模板文件中,使用从php中assign过来的smarty变量,一定需要使用双引号或单引号来括住smarty变量,如:var title="<!- ...

  7. 如何在smarty模板中执行php代码

    Smarty模板主要的目的是分离逻辑层和表现层,所以在模板中不应该包含逻辑部分,逻辑层也不应该含有HTML.要在模板中插入逻辑程序的这种做法"非常"不被推荐,在你的case中. 如 ...

  8. smarty模板中literal标签的使用

    在使用的时候把js等代码写在模板中就报错,加入literal标签后就正确了 <style> {literal} .tr_color{background-color: #9F88FF} { ...

  9. wuzhicms 查看模板中的所有可用变量和值

    将代码放到模板中. {php print_r(get_defined_vars());} 页面显示如下: 这样看不清楚. 通过查看页面源文件的方式打开. 例如:chrome 浏览器打开方式,在页面空白 ...

随机推荐

  1. 20160126深入浅出obc知识点整理

    1.错误域Error Domain NSMachErrorDomain:系统内核错误 NSPOSIXErrorDomain:系统错误 NSOSStatusErrorDomian:MacOS9之前的错误 ...

  2. PropertyGrid排序

    解决PropertyGrid对自定义属性排序的问题. 参考了:http://www.cnblogs.com/greatverve/archive/2012/02/08/propergrid-order ...

  3. 数值积分NIntegrate中的具体算法

    数值积分方法很多,Mathematica中至提供了NIntegrate.具体算法可参照官方帮助. http://reference.wolfram.com/language/tutorial/NInt ...

  4. C++ 11 之Lambda

    1.Lambda表达式来源于函数式编程,说白就了就是在使用的地方定义函数,有的语言叫“闭包”,如果 lambda 函数没有传回值(例如 void ),其回返类型可被完全忽略. 定义在与 lambda ...

  5. C++虐恋:MBCS安装失败导致的四天误工

    情况描述:接收远程队友的C++代码,基于vc120工具集(VS2013),而我的机器上是VS2015,需要安装VS2013(只选MFC,除主程序与MFC外其余的组件全部卸掉).然后开始编译,提示 MS ...

  6. Linux platform设备简介

    Technorati 标签: Linux platform     Linux在2.6内核中,针对一系列设备驱动,提供新的管理框架,成为platform机制,推出的目的,在于隔离驱动的资源和实现,使得 ...

  7. BMP文件格式分析

    前两天要做一个读取bmp文件的小程序,顺便查找了一些关于BMP格式的文章,现在post上来. 简介 BMP(Bitmap-File)图形文件是Windows采用的图形文件格式,在Windows环境下运 ...

  8. asp.net2.0 国际化

    公司业务需要在国外开展了, 因此以前的系统要做多国语言了, 从网上搜集了好多资料, 最后选择了一个比较简单的方案 1.  打开vs2005, 新建网站, 首先在配置文件中添加配置: <syste ...

  9. PHP性能优化-编译级别的缓存

    最近安装了 php5.6,发现有了 opcache.so扩展文件,于是,搜索了一下,发现 zend opcache已经融入到 ph5.5以上的版本了,即兴奋,不用再去找xcache,apc,eAcce ...

  10. openerp - asterisk connector(转载)

    原文:http://www.akretion.com/open-source-contributions/openerp-asterisk-voip-connector OpenERP - Aster ...