第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

用戶從支付網(wǎng)關(guān)重定向回網(wǎng)站后,CodeIgniter 會(huì)話數(shù)據(jù)丟失

用戶從支付網(wǎng)關(guān)重定向回網(wǎng)站后,CodeIgniter 會(huì)話數(shù)據(jù)丟失

PHP
慕的地6264312 2022-12-03 10:18:38
我正在使用 CodeIgniter 3 開(kāi)發(fā)一個(gè)項(xiàng)目。用戶可以通過(guò)預(yù)訂頁(yè)面上的 paytm 支付網(wǎng)關(guān)進(jìn)行在線支付。用戶完成付款流程后,他將被重定向回我的網(wǎng)站,該網(wǎng)站由響應(yīng)控制器處理,我正在使用存儲(chǔ)在會(huì)話中的預(yù)訂 ID 更新預(yù)訂詳細(xì)信息,如付款方式和預(yù)訂狀態(tài)。當(dāng)我嘗試在此控制器中訪問(wèn)會(huì)話數(shù)據(jù)時(shí),會(huì)話數(shù)據(jù)不可用。這是我的會(huì)話配置: $config['sess_driver'] = 'files'; $config['sess_cookie_name'] = 'ci_session'; $config['sess_expiration'] = 7200; $config['sess_save_path'] = BASEPATH . 'cache/sessions/'; $config['sess_match_ip'] = FALSE; $config['sess_time_to_update'] = 300; $config['sess_regenerate_destroy'] = FALSE;這是處理支付網(wǎng)關(guān)發(fā)送的響應(yīng)的控制器public function paytmResponse(){    $this->load->model('booking_model');    $this->load->model('user_model');    $this->load->library('paytm');    $paytmChecksum = isset($_POST["CHECKSUMHASH"]) ? $_POST["CHECKSUMHASH"] : "";     $this->booking_model->updatePaymentType($_SESSION['bid'], 'online');    $valid_checksum = $this->paytm->verifyChecksum($_POST, $paytmChecksum);    if($valid_checksum){        if($_POST["STATUS"] == "TXN_SUCCESS"){              $this->booking_model->savePaymentDetails($_SESSION['bid']);            $this->booking_model->updateBookingStatus($_SESSION['bid'], 'pending');            $status = 1;         }        else{            $this->booking_model->updateBookingStatus($_SESSION['bid'], 'failed');            $status = 0;        }    }    else{        $this->booking_model->updateBookingStatus($_SESSION['bid'], 'failed');        $status = 2;    }           if($status == 1){                redirect('booking/success');    }        else{          $_SESSION['booking_error'] = 'Payment failed';                 redirect('booking/failure');    }}我正在使用 codeigniter 會(huì)話庫(kù),php 版本 7.2
查看完整描述

3 回答

?
守著星空守著你

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超8個(gè)贊

這是一個(gè)老問(wèn)題,但看起來(lái)沒(méi)有得到適當(dāng)?shù)慕鉀Q。在 CI 3.1.11 中,我重定向到支付網(wǎng)關(guān),當(dāng)網(wǎng)關(guān)完成支付并將控制權(quán)返回給會(huì)話時(shí),會(huì)話變量“丟失”了。


事實(shí)上,他們只是沒(méi)有重生。數(shù)小時(shí)(數(shù)天!?。┖笳{(diào)查此事并嘗試此處列出的所有選項(xiàng)和其他選項(xiàng)(均無(wú)效?。鸢冈谟谥匦律蓵?huì)話變量。


如果您的用戶僅通過(guò) LAN 訪問(wèn)系統(tǒng),那么您可能無(wú)需執(zhí)行前兩個(gè)步驟:


在 system/libraries/Session/Session.php 中注釋掉第 126 - 128 和 130 行。

//if (!isset($_SESSION['__ci_last_regenerate'])) {

//    $_SESSION['__ci_last_regenerate'] = time();

//} elseif ($_SESSION['__ci_last_regenerate'] < (time() - $regenerate_time)) {

            $this->sess_regenerate((bool) config_item('sess_regenerate_destroy'));

//}

原因是它在第 121 行$_SESSION['__ci_last_regenerate']之后沒(méi)有恢復(fù)。session_start()因此$this->sess_regenerate()從未執(zhí)行過(guò)。


第二步是確保注銷函數(shù)正確清除緩存以防止注銷后重新生成:

function logout() {

    $this->session->sess_destroy();

    $this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate, no-transform, max-age=0, post-check=0, pre-check=0");

    $this->output->set_header("Pragma: no-cache");

    redirect('logout');

}

如果您的用戶將通過(guò)移動(dòng)或 wifi 網(wǎng)絡(luò)訪問(wèn),那么您可能需要做更多的事情。在 PHP 文檔中的 PHP 函數(shù)session_regenerate_id() 上,它給出了警告:


警告 目前,session_regenerate_id 不能很好地處理不穩(wěn)定的網(wǎng)絡(luò),例如移動(dòng)和 WiFi 網(wǎng)絡(luò)。因此,您可能會(huì)通過(guò)調(diào)用 session_regenerate_id 遇到會(huì)話丟失的情況。


所以這就是我所做的:


找到session_id上次會(huì)話的。如果您的會(huì)話數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中,那么以下代碼可能會(huì)很好地工作:

function latestSessionId() {

    $CI = & get_instance();

    $CI->db->reset_query();

    $CI->db->select("id")->from($this->_config['save_path'])->order_by('timestamp','desc');

    empty($this->config['match_ip']) OR $this->_db->where('ip_address', $_SERVER['REMOTE_ADDR']);

    $result = $CI->db->get();

    empty($result) OR $result = $result->row();

    return empty($result) ? FALSE : $result->id;

}

按照此處的建議,然后在 session.php 的第 121 行執(zhí)行以下操作:

$session_id = $this->latestSessionId();

session_id($session_id);

session_start();

將功能更改sess_regenerate為:

public function sess_regenerate($destroy = FALSE) {

    $_SESSION['__ci_last_regenerate'] = time(); 

    //session_regenerate_id($destroy);

    if (session_status() !== PHP_SESSION_ACTIVE) {

        $session_id = $this->latestSessionId();

        session_id($session_id);

        session_start();

    }

}

更改config.php為參數(shù)sess_expiration和具有相同的值sess_time_to_update:

$config['sess_driver'] = 'database'; 

$config['sess_cookie_name'] = 'cisession';

$config['sess_expiration'] = 7200;

$config['sess_save_path'] = 'ci_sessions'; 

$config['sess_match_ip'] = TRUE;  

$config['sess_time_to_update'] = 7200;


查看完整回答
反對(duì) 回復(fù) 2022-12-03
?
躍然一笑

TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個(gè)贊

這個(gè)錯(cuò)誤可能是我在 codigniter 4 版本中遇到的


在你的 .env 文件中


 cookie.prefix = ''

 cookie.expires = 0

 cookie.path = '/'

 cookie.domain = ''

 cookie.secure = true

 cookie.httponly = false

 cookie.samesite = 'None'

 cookie.raw = false

此錯(cuò)誤將解決


查看完整回答
反對(duì) 回復(fù) 2022-12-03
?
慕妹3242003

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超6個(gè)贊

下面的解決方案在 Codeigniter 中對(duì)我來(lái)說(shuō)是正確的。如果您使用 重定向到支付網(wǎng)關(guān)header("Location: $url");。只需exit();在標(biāo)題重定向后添加即可。因?yàn)槟臅?huì)話被支付網(wǎng)關(guān)會(huì)話覆蓋,他們會(huì)為其支付網(wǎng)關(guān)啟動(dòng)新會(huì)話。添加exit();您的會(huì)話后,只要您的會(huì)話有效,您的域就會(huì)保持不變。最終代碼將是

header("Location: $url");exit();


查看完整回答
反對(duì) 回復(fù) 2022-12-03
  • 3 回答
  • 0 關(guān)注
  • 160 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)