thinkphp session 取不到驗證碼

來源:互聯網
上載者:User
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終於可以傳值了

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.