Home > Backend Development > PHP Tutorial > thinkphp session 取不到验证码

thinkphp session 取不到验证码

WBOY
Release: 2016-06-23 14:13:13
Original
1042 people have browsed it

thinkphp session 验证码

          //查询验证码
function checklogin(){
              $data=$_SESSION['verifyCode'];
  echo $data;
 }
 //生成验证码
public function verify(){
    
         import("@.ORG.Image");
 $image=new Image();
         $image->buildImageVerify(6, 5);
 
   }
验证码生成了,但是控制器里面session就是取不到验证码
  static function showAdvVerify($type='png', $width=180, $height=40, $verifyName='verifyCode') {
        $rand = range('a', 'z');
        shuffle($rand);
        $verifyCode = array_slice($rand, 0, 10);
        $letter = implode(" ", $verifyCode);
        $_SESSION[$verifyName] = $verifyCode;
略。。。。。。。

回复讨论(解决方案)

你没加 session_start(); 吧

1、确认程序文件没有 BOM 头
2、操作 session 应该用 TP 提供的方法
3、确认你的代码和工作过程与 TP 约定的一致

TP 提供了验证码生成类,也提供了表单验证。并不需要自己写代码,只需填写参数就可以了

1、BOM已经用专门方法去除了。
2、操作session是用的$_SESSION['']进行赋值和读取的,这个应该没错。
3、验证码生成的方法,是调用的thinkphp提供的方法。
xuzuning提的这个工作过程,我也觉得有点问题。
这个是我的项目结构

下面是index.php的内容
  define('APP_NAME','Myapp');
  define('APP_PATH','./Myapp/');
  require 'ThinkPHP/ThinkPHP.php';
?> 
访问的时候http://localhost:8080/huhaoweb/index.php/进行访问,由于重写了url所以index.php就不用写了

还有就是如果在一个方法里面进行 session的赋值和获取是可以打印出来的,但是跳到其他方法就获取不到。就像是重新进入服务器一样。session里面是空的。

19.1               Session支持
系统提供了Session管理和操作的完善支持,全部操作可以通过一个内置的session函数完成。

Session  用于Session 设置、获取、删除和管理操作
 
用法
 session($name, $value='')
 
参数
 name(必须):如果传入数组 则表示进行session初始化,如果传入null表示清空当前session,如果是字符串则表示session赋值、获取或者操作。

Value(可选):要设置的session值,如果传入null表示删除session,默认为空字符串
 
返回值
 见详(根据具体的用法返回不同的值)
 

session函数是一个多元化操作函数,传入不同的参数调用可以完成不同的功能操作,包括下面一些功能。

session初始化设置

如果session方法的name参数传入数组则表示进行session初始化设置,例如:

session(array('name'=>'session_id','expire'=>3600));

支持传入的session参数包括:

参数名
 说明
 
id
 session_id值
 
name
 session_name 值
 
path
 session_save_path 值
 
prefix
 session 本地化空间前缀
 
expire
 session.gc_maxlifetime 设置值
 
domain
 session.cookie_domain 设置值
 
use_cookies
 session.use_cookies 设置值
 
use_trans_sid
 session.use_trans_sid 设置值
 
type
 session hander类型,可以使用hander驱动扩展
 

Session初始化设置方法 无需手动调用,在App类的初始化工作结束后会自动调用,通常项目只需要配置SESSION_OPTIONS参数即可,SESSION_OPTIONS参数的设置是一个数组,支持的索引名和前面的session初始化参数相同。

默认情况下,初始化之后系统会自动启动session,如果不希望系统自动启动session的话,可以设置SESSION_AUTO_START为false,例如:

'SESSION_AUTO_START' =>false

关闭自动启动后可以项目的公共文件或者在控制器中通过手动调用session_start或者session('[start]') 启动session。

 

session赋值

Session赋值比较简单,直接使用:

session('name','value');  //设置session

 

session取值

Session取值使用:

$value = session('name');

 

session删除

session('name',null); // 删除name

要删除所有的session,可以使用:

session(null); // 清空当前的session

 

session判断

要判断一个session值是否已经设置,可以使用

session('?name');

用于判断名称为name的session值是否已经设置

 

session管理

session方法支持一些简单的session管理操作,用法如下:

session('[操作名]');

支持的操作名包括:

操作名
 含义
 
start
 启动session
 
pause
 暂停session写入
 
destroy
 销毁session
 
regenerate
 重新生成session id
 

使用示例如下:

session('[pause]'); // 暂停session写入

session('[start]'); // 启动session

session('[destroy]'); // 销毁session

session('[regenerate]'); // 重新生成session id

 

本地化支持

如果在初始化session设置的时候传入prefix参数或者单独设置了SESSION_PREFIX参数的话,就可以启用本地化session管理支持。启动本地化session后,所有的赋值、取值、删除以及判断操作都会自动支持本地化session。

本地化session支持开启后,生成的session数据格式由原来的

$_SESSION['name'] 变成 $_SESSION['前缀'] ['name']

 

session hander支持

是初始化session设置的时候,如果传入了type参数,则会自动引入对应的hander驱动,驱动扩展目录位于Extend/Driver/Session目录下面(详见扩展部分)。

这个可能是关键
每次生成验证码的时候,就会通过SESSION记录本次的验证码的md5后的字符串信息,所以,要检查验证码是否正确,我们只需要在Action中使用下面的代码就行了:

if($_SESSION['verify'] != md5($_POST['verify'])) {

   $this->error('验证码错误!');

 }

注意,这里的verify名称取决于你的验证码的verifyName参数的值。

session_start();

session_start(); 在php+mysql还有用,在thinkphp里面就没什么用的,默认的是自动开启。

终于解决了,以前别人用的这台电脑,使用php mysql 。。自己配置的。而我是用的wamp集成的开发环境,所以session的保存的路径在php5下面,导致session的读取产生错误。所以我删除掉php5,重启服务器session终于可以传值了

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template