CakePHP框架Session设置方法分析

 更新时间:2017年7月6日 23:49  点击:1465
小编给大家推荐的这篇文章介绍了CakePHP框架Session设置方法分析,非常实用,有兴趣的同学快来看看吧

本文实例讲述了CakePHP框架Session设置方法。分享给大家供大家参考,具体如下:

CakePHP Session 存储选项

CakePHP提供给用户了3种Session数据保存方式:

1. CakePHP安装目下的临时文件;
2. 采用PHP的默认机制;
3. 或者序列化到数据库中.

对应的设置在core.php中分别为:

 
define('CAKE_SESSION_SAVE','php');
# 设置为'cake',保存session到 /cakedistro/tmp目录
# 设置为'php',采用PHP的缺省路径
# 设置为'database',

默认采用PHP的机制.

如果选择在数据库中存储,需要在数据库中建立一张表,在/app/config/sql/sessions.sql有创建数据库的sql脚本.

无论选择哪种Session存储方式,CakePHP的组件方法操作基本一致:

CakePHP Session Component用来与Session进行交互:包括基本的Session读写,通过Session来提示错误、发出提示消息等等.

Session Component在所有 Cake controller 中默认可用.

check(string $name);

检查Session中是否已有$name为键值的数据项.

del(string $name);
delete(string $name);

删除$name 指定的 Session 变量。

error

返回最近由 Cake Session Component 产生的错误,常用于调试。

flash(string $key='flash');

返回最后一条Session中用 setFlash() 设置的消息。如果 $key 已设置,将返回最近存储于其中的消息.

read(string $name);

返回 $name 变量值。

renew

通过创建新的seesion ID,删除原有的ID,将原有Session中信息更新到新的Session中。

setFlash(string $flashMessage, string $layout='default', array $params, string $key='flash');

将$flashMessage 中的信息写入Session(供之后的flash()方法来获取)。

如果 $leyout 设置为 “default”,该消息被存储为 '

'.$flashMessage.'

'。如果$layout 设置为  '',该消息将按原样保存。如果 $layout 为其他值,该消息以 $layout 所指定的格式保存在 Cake view里。

$params 参数会在未来版本中赋予功能。

$key 允许在键下存储提示消息,flash() 是基于键来读取消息的。

valid当Session有效时返回true,最好在read()操作前用它来确定你要访问的会话是否确实有效.

write(string $name, mixed $value);

将变量 $name,$value写入会话.

本文介绍了PHP函数rtrim()使用中的怪异现象分析,非常实用,有兴趣的同学快来看看吧。

今天用rtrim()函数时遇到了一个奇怪的问题:

 

 代码如下 复制代码

echortrim('<p></div>','</div>');// 输出为 <p

echoltrim('www.jb51.net','www.');// 输出为 jb51.net

 

以上的输出结果有点出人意料,本来我想第一行应该输出<p>,第二行会输出jb51.net。

这个问题纠结了我好久,一直没有找到原因,后来在手册中找到了答案:

rtrim()是以字符为单位替换,而不是以字符串的。从右往左替换时</div>6个字符肯定会被替换掉的,再往左时遇到了>,因为>也包含在rtirm()的第二个参数的字符串(</div>)中,所以也被替换掉了,当再往左时遇到了p,这时p不包含在第二个参数的字符串中。所以替换停止,输出了<p。

如果这样理解的话,第二行的输出结果就是在意料之中了。呵呵&hellip;&hellip;手册中已经写的清清楚楚了。原文:

You can also specify the characters you  want to strip, by means of the charlist parameter. Simply list all  characters that you want to be stripped. With .. you can specify a range  of characters。

由此可见,rtrim、ltrim与trim第二个参数是作为一组字符列表进行匹配操作的。这与我们以往认识的str_replace函数的替换操作不一样。

小编推荐的这篇文章介绍了cakephp2.X多表联合查询join及使用分页查询的方法,非常实用,有兴趣的同学快看看吧

格式化参数:

 代码如下 复制代码

publicfunctiongetconditions($data){

  $this->loadModel("Cm.LoginHistory");

  $conditions=array();

  foreach($dataas$key=>$val){

    if($key=='start_date'){

      $conditions['LoginHistory.logintime >=']=trim($val);

    }elseif($key=='end_date'){

      $conditions['LoginHistory.logouttime <=']=trim($val);

    }elseif($key=='selectvsoftid'and$val!=''){

      $conditions['LoginHistory.LOGINSUBSYSTEM LIKE']='%'.trim($val).'%';

    }elseif($key=='username'and$val!=''){

      $conditions['LoginHistory.USERNAME LIKE']='%'.trim($val).'%';

    }elseif($key=='vdevicename'and$val!=''){

      $conditions['LoginHistory.WINDOWNAME LIKE']='%'.trim($val).'%';

    }elseif($key=='selectvsoftid'and$val!=''){

      $conditions['LoginHistory.PHDEVICENAME LIKE']='%'.trim($val).'%';

    }

  }

  return$conditions;

}

分页查询:

 代码如下 复制代码

$fields=array('LoginHistory.windowname','LoginHistory.loginsubsystem','VirtualDevice.PHDEVICEID','LoginHistory.userid','VirtualDevice.SYSTYPEID','UserInfo.USERNAME','"SUM"(LoginHistory.LOGOUTTIME-LoginHistory.LOGINTIME) moument','UserInfo.USERNAME','DeviceInfo.DEVICENAME');

$group=array('LoginHistory.windowname','LoginHistory.loginsubsystem','LoginHistory.userid','UserInfo.USERNAME','DeviceInfo.DEVICENAME','VirtualDevice.SYSTYPEID','VirtualDevice.PHDEVICEID');

$this->paginate =array('conditions'=>$conditions,'fields'=>$fields,'group'=>$group,'limit'=>9,'joins'=>array(

   array(

     'alias'=>'UserInfo',

     'table'=>'SMM_USERINFO',

     'type'=>'LEFT',

     'conditions'=>' LoginHistory.USERID=UserInfo.USERID ',

   ),

   array(

     'alias'=>'VirtualDevice',

     'table'=>'ET_NMVIRTUALDEVICEINFO',

     'type'=>'LEFT',

     'conditions'=>' LoginHistory.WINDOWNAME=VirtualDevice.DEVICENAME ',

   ),

   array(

     'alias'=>'DeviceInfo',

     'table'=>'ET_NMDEVICEINFO',

     'type'=>'LEFT',

     'conditions'=>' VirtualDevice.PHDEVICEID=DeviceInfo.DEVICEID ',

   ),

 ));

$LoginHistory=$this->paginate('LoginHistory');

$this->set('loginhistory',$LoginHistory);

小编推荐的这篇文章介绍了PHP获取中国时间(上海时区时间)及美国时间的方法,非常实用,有兴趣的同学快来看看吧

中国时间:

 

 代码如下 复制代码

/**

 * 获取中国时间,即上海时区时间

 * @param <type> $format

 * @return <type>

 */

functiongetChinaTime($format="Y-m-d H:i:s") {

  $timezone_out= date_default_timezone_get();

  date_default_timezone_set('Asia/Shanghai');

  $chinaTime=date($format);

  date_default_timezone_set($timezone_out);

  return$chinaTime;

}

echogetChinaTime();//输出当前时间,如:2017-02-23 11:50:50

 

美国时区:

America/New_York 美国东部

封装了另外一个方法:

 

 代码如下 复制代码

/**

 * 时间格式化

 * @param string $dateformat 时间格式

 * @param int $timestamp 时间戳

 * @param int $timeoffset 时区偏差

 * @return string

 */

functionqgmdate($dateformat='Y-m-d H:i:s',$timestamp='',$timeoffset= 8) {

  if(empty($timestamp)) {

    $timestamp= time();

  }

  $result=gmdate($dateformat,$timestamp+$timeoffset* 3600);

  return$result;

}

//应用举例:获取美国时间

echoqgmdate('Y-m-d H:i:s','', -4);//输出美国时间,如:2017-02-22 23:51:17

 

小编推荐的这篇文章介绍了利用php生成验证码的教程,非常实用,有兴趣的同学快来看看吧。

 

 代码如下复制代码

<?php

/**

 * php生成验证码

 * @param $width 画布宽

 * @param $height 画布高

 * @param $vcodelen 验证码长度

 * @param $pointnum 干扰像素点数量

 * @param $linenum 干扰线条数量

 *

 * 思路:创建验证码画布,生成并填充背景色,生成验证码内容/干扰像素点/线,填充到画布,输出。

 */

 $width= 100;

 $height= 30;

 $vcodelen= 4;

 $pointnum= 200;

 $linenum= 3;

 // 创建画布

 $image= imagecreatetruecolor($width,$height);

 // 创建色块

 $bgcolor= imagecolorallocate($image, 255, 255, 255);

 // 填充画布背景色

 imagefill($image, 0, 0,$bgcolor);

 // 验证码内容

 for($i=0;$i<$vcodelen;$i++) {

  // 字体大小

  $fontsize= 5;

  // 字体颜色,颜色在限定范围内随机

  $fontcolor= imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120));

  $data='abcdefghijklmnopqrstuvwxyz0123456789'

  // 验证码内容在以上字符串内随机截取

  $fontcontent=substr($data, rand(0,strlen($data)),1);

  // 字符串显示位置

  $x= ($i*$width/4)+rand(5,15);

  $y= rand(5,10);

  // 字符串填充图片

  // imagestring的字体大小可选1-5,字体再大需要用imagettftext函数(需要字体文件)

  imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);

  // imagettftext($image, $fontsize, 0, $x, $y, $fontcolor, '/font/Geneva.dfont', $fontcontent);

 }

 // 干扰像素点

 for($i=0;$i<$pointnum;$i++) {

  $pointcolor= imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120));

  // 画布填充像素点函数

  imagesetpixel($image, rand(0,$width), rand(0,$height),$pointcolor);

 }

 // 干扰线条

 for($i=0;$i<$linenum;$i++) {

  $linecolor= imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120));

  // 画布填充线条函数

  imageline($image, rand(0,$width), rand(0,$height), rand(0,$width), rand(0,$height),$linecolor);

 }

 // 图片输出格式

 header('content-type: image/png');

 // 输出验证码图片

 imagepng($image);

 // 销毁画布

 imagedestroy($image);

?>

 

[!--infotagslink--]

相关文章

  • PHP session_start()很慢问题分析与解决办法

    本文章来给各位同学介绍一下关于PHP session_start()很慢问题分析与解决办法,希望碰到此问题的同学可进入参考。 最近在做东西的时候发现一个问题 有一个接口挂...2016-11-25
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • PHP分布式框架如何使用Memcache同步SESSION教程

    本教程主要讲解PHP项目如何用实现memcache分布式,配置使用memcache存储session数据,以及memcache的SESSION数据如何同步。 至于Memcache的安装配置,我们就不讲了,以前...2016-11-25
  • ps中怎么设置垂直罗马对齐方式?垂直罗马对齐方式设置方法

    photoshop的直排文字工具,打出的字特别是英文字母,默认排列侧向的,如何调整为正向排列呢?下面我们就来看看标准的罗马对齐方式应该怎么设置。 1、在PS中点击“工具面...2017-01-22
  • 详解C#中的session用法

    这篇文章主要介绍了C#中的session用法 ,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • Python3使用Selenium获取session和token方法详解

    这篇文章主要介绍了Python3使用Selenium获取session和token方法详解,需要的朋友可以参考下...2021-02-17
  • 编程新手必须掌握的:session与cookie的区别

    session和cookie是网站浏览中较为常见的两个概念,也是比较难以辨析的两个概念,但它们在点击流及基于用户浏览行为的网站分析中却相当关键。基于网上一些文章和资料的参阅,及作者个人的应用体会,对这两个概念做一个简单的阐述...2013-09-11
  • PHP中如何使用session实现保存用户登录信息

    session在php中是一个非常重要的东西,像我们用户登录一般都使用到session这个东西,相对于cookie来说session 要安全很多,同时我们购物车经常使用session来做临时的记录保存哦。使用session保存页面登录信息1、数据库连接...2015-10-21
  • Vue使用axios引起的后台session不同操作

    这篇文章主要介绍了Vue使用axios引起的后台session不同操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-14
  • php中session常见问题分析

    PHP的session功能,一直为许多的初学者为难。就连有些老手,有时都被搞得莫名其妙。本文,将这些问题,做一个简单的汇总,以便大家查阅。 1. 错误提示 引用 代...2016-11-25
  • php设置session生存时间详解

    要设置php生存有效时间我们可以利用session_set_cookie_params函数或修改php.ini文件哦,下面小编来介绍一下。 第一种方法:session_set_cookie_params 函数原型 voi...2016-11-25
  • 小米M2手机wifi上网设置方法

    本文章来介绍的是小米手机的无线网络wifi的设置方法,有需要学习wifi网络设置上网的朋友可详细的参考参考。 ==进入小米手机的主界面: ==然后点击wifi快速打开的地...2016-09-20
  • jsp使用sessionScope获取session案例详解

    这篇文章主要介绍了jsp使用sessionScope获取session案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...2021-08-29
  • C#实现简单获取及设置Session类

    这篇文章主要介绍了C#实现简单获取及设置Session类,涉及C#针对session的设置及获取的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • Node.js刷新session过期时间的实现方法推荐

    下面小编就为大家带来一篇Node.js刷新session过期时间的实现方法推荐。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-05-20
  • jQuery ajax全局函数处理session过期后的ajax跳转问题

    这篇文章主要介绍了基于jQuery的全局ajax函数处理session过期后的ajax操作的相关资料,需要的朋友可以参考下...2016-06-12
  • asp.net中穿透Session 0 隔离(二)

    上一篇我们已经对Session 0 隔离有了进一步认识,如果在开发过程中确实需要服务与桌面用户进行交互,可以通过远程桌面服务的API 绕过Session 0 的隔离完成交互操作...2021-09-22
  • PHP session并发及session读写锁分析

    关于PHP session并发及session读写锁问题估计各大程序员都不会想到这个问题,因为一般情况我们不会使用session来做并发操作了,但有时也有可能用到,下面整理一个session并...2016-11-25
  • Nodejs中session的简单使用及通过session实现身份验证的方法

    session的本质使用cookie来实现。本文给大家介绍Nodejs中session的简单使用及通过session实现身份验证的方法,对node.js session相关知识感兴趣的朋友一起学习吧...2016-02-09
  • php中session引起错误问题集锦与解决办法

    php中session经常会出现一些很奇怪的问题,这些问题很多都是小细节的事情,对于php 初学者来说可能很难发现是什么原因,今天我们把几乎所有的session引起或出现的问题收集...2016-11-25