問題描述

《thinkphp實現(xiàn)短信驗證注冊》中,小編不止記錄了短信驗證碼的實現(xiàn)方法,同時還記錄了圖片驗證碼的實現(xiàn)方法。
本地使用,一切正常;后端項目和前端項目都部署到服務(wù)器,一切正常;后端項目部署到服務(wù)器,并設(shè)置允許跨域訪問后,本地前端項目使用服務(wù)器上后端項目接口時,問題來了:
首先,使用postman測試獲取圖片驗證碼接口和驗證圖片驗證碼接口,正常。
然后,在html中使用獲取圖片驗證碼接口,正常;最后,在JS中使用驗證圖片驗證碼接口,出錯?。?!

分析

通過問題描述,我們看出,問題出現(xiàn)在跨域上。那么,有兩種可能,一種是因為跨域設(shè)置不正確;一種是因為thinkphp本身的問題。

采用另外一種跨域配置,問題依然存在。那就是thinkphp本身的問題了,經(jīng)查找資料,問題定位在thinkphp的session跨域上。

跨子域解決辦法

其實不管是ThinkPHP還是php本身,在解決session跨域問題的時候都需要設(shè)置session.cookie_domain。
針對session跨域這一問題的解決方法主要有以下幾種:
第一種情況:如果目錄下沒有.htaccess這個文件,也就是沒有采取url偽靜態(tài)的話,那么,在conf/config.php的第一行加上:

ini_set('session.cookie_domain',".domain.com");//跨域訪問Session

這時如果你開啟了調(diào)試,那么可以用!但關(guān)閉了調(diào)試,就不管用了!

第二種情況:如果你目錄下有.htaccess這個文件,那么你在根目錄,index.php的第一行加入:

<?php ini_set('session.cookie_domain',".domain.com");//跨域訪問Session // 應(yīng)用入口文件 ?>

這種方法不管開不開啟調(diào)試都管用!

然而,我們的問題并不是跨子域的問題,而是完全跨域,所以上述方法無效。

完全跨域解決辦法

獲取圖片驗證碼請求

查看獲取圖片驗證碼的請求信息,Request Headers為:

Accept:image/webp,image/*,*/*;q=0.8 Accept-Encoding:gzip, deflate, sdch Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4 Connection:keep-alive Cookie:pma_lang=zh_CN; pma_collation_connection=utf8_unicode_ci; pma_iv-1=wnpO4gv0eQRW1AMHmGr2ww%3D%3D; pmaUser-1=weZPqS0%2BW7nzFUVHRdqcfA%3D%3D Host:api.voidking.com Referer:http://localhost/ajax/ajax.html User-Agent:Mozilla/5.0 (Windows NT 6.3; Win64;&nbs
        
		

網(wǎng)友評論