weixin_58648225 2021-10-27 18:47 采纳率: 89.2%
浏览 93
已结题

请教一个关于使session失效的问题

目的是为了防止在页面刷新后,亦或是在url连接处手动输入尝试进入网页时,抛出错误信息。
但是这样以来,还是会尝试读取session信息,自而报错, 错误信息及代码如下

<?php

require_once(dirname(__FILE__)."/../../common/auth.php");
require_once(dirname(__FILE__)."/../../common/defs_gen.php");
require_once(dirname(__FILE__)."/../../common/user.php");
require_once(dirname(__FILE__)."/../../common/bhcs_db.php");
require_once(dirname(__FILE__)."/../../common/affiliate.php");
require_once(dirname(__FILE__)."/../../home/bh/common/tutor_bh.php");
require_once(dirname(__FILE__)."/../../zoom/zoom_api.php");
require_once(dirname(__FILE__)."/../../common/bhcs/trial_lesson.php");

$word    = new word();
$user_id = check_auth_login_user();

// トークンチェック
$tokenError = check_token('conf_trial_regist_token');

if ($_SESSION) {
    $user_info = user::get_info_by_id($user_id);
    $post      = $_SESSION;

    $post['email']            = $user_info->email;
    $post['delivery_email']   = $user_info->delivery_email;
    $post['bh_account_id']    = $user_info->bh_account_id;
    $post['bh_user_id']       = $user_info->bh_user_id;
    $post['user_name']        = $user_info->name;
    $post['user_name_jp']     = $user_info->name_jp;

    $post['course_name']      = foundation::$course_list[$post['course_id']];
    $post['language_name']    = $post['language_id'] ? bhcs_db::getLanguageWithLanguageId($post['language_id']) : '';
    $post['tutor_type_name']  = ($post['tutor_type'] == 'japanese') ? '日本人' : 'ネイティブ';
    $post['application_type'] = ($post['datetime_type'] == 1) ? '仮予約' : '予約確定';
    $post['program_name']     = $post['program_id'] ? foundation::$en_program_list[$post['program_id']] : '';

    $res = TrialLesson::regist($user_info, $post);

    $error_msg = '';
    if (!$res->error){
        // 本予約でレッスン方法がオンラインの場合
        if (($post['datetime_type'] == 2) && ($post['lesson_type1'] == 2)) {
            // Zoomミーティング作成
            $duration    = 90;
            $agenda      = 'Lesson: Trial lesson' . '\r\n' . ' Date:' . $res->start_datetime;
            $date        = date('Y-m-d', strtotime($res->start_datetime));
            $start_time  = date('H:i', strtotime($res->start_datetime));
            $end_time    = date('H:i', strtotime($res->start_datetime . '+90 minute'));
            $zoom_result = zoom_api::set_meeting_create_data($duration, 'Trial lesson', $agenda, $date, $start_time, $end_time, $res->zoom_user_id);
            if ($zoom_result) {
                bhcs_db::registZoomMeeting($res->application_id, $res->lesson_id, $res->start_datetime, $duration, $zoom_result);
            }
        }

        // アフィリエイト情報取得
        $affiliate = Affiliate::get_affiliate_by_user_id($user_id);
        if ($affiliate) {
            // アフィリエイトステータス更新
            Affiliate::update_status_by_user_id($user_id, $affiliate->id);
            if ($affiliate->affiliate_type_id == AFFILIATE_TYPE_A8_01) {
                // アフィリエイトデータ送信
                send_curl_affiliate_data($affiliate);
            }
        }

        // 不要なセッション削除
        foreach ($_SESSION as $key => $val) {
            if ($key == 'user_loginhash') {
                continue;
            }
            unset($_SESSION[$key]);
        }
    } else {
        // 仮予約の場合
        if ($post['datetime_type'] == 1) {
            $error_msg = '申し訳ありません、ご指定の全ての日時の予約枠は既に埋まってしまいました。<br>お手数ですが、下記ボタンより日時の再選択をお願いいたします。<br>※入力情報は保持しています。';
        // 本予約の場合
        } else {
            $error_msg = '申し訳ありません、ご指定の日時・講師の予約枠は既に埋まってしまいました。<br>お手数ですが、下記ボタンより日時・講師の再選択をお願いいたします。';
        }
        // 指定の日時・講師が埋まっているのでセッションを削除(datetime1は画面遷移的に除外)
        unset($_SESSION['datetime2']);
        unset($_SESSION['datetime3']);
        unset($_SESSION['datetime_type']);
        unset($_SESSION['tutor_type']);
        unset($_SESSION['lesson_type1']);
        unset($_SESSION['lesson_type2']);
        unset($_SESSION['lesson_type3']);
    }
}

$step1 = is_smartphone() ? 'コース' : 'コース選択';
$step2 = is_smartphone() ? '日時' : '日時選択';
$step3 = is_smartphone() ? '確認' : '確認';
$step4 = is_smartphone() ? '完了' : '予約完了';


$not_header_content = true;
$header = array(
    'title' => '無料体験レッスンお申し込み | 完了画面'
);

?>

<script>
    (function(){
    var _CIDN = "cid";
    var _PLIDN = "plid";
    var _ACTN = "cid_auth_get_type";
    var _APTN = "plid_auth_get_type";
    var _PMTV = "5cee139ab4a1a";
    var _TRKU = "https://growth-link.net/track.php?p=" + _PMTV;
    var _cks = document.cookie.split("; ");
    var _cidv = "", _plidv = "", _actv = "", _aptv = "";
    for(var i = 0; i < _cks.length; i++){ var _ckd = _cks[i].split("="); if(_ckd[0] == "CL_" + _PMTV && _ckd[1].length > 1){ _cidv = _ckd[1]; } if(_ckd[0] == "PL_" + _PMTV && _ckd[1].length > 1){ _plidv = _ckd[1]; } if(_ckd[0] == "ACT_" + _PMTV && _ckd[1].length > 1){ _actv = _ckd[1]; } if(_ckd[0] == "APT_" + _PMTV && _ckd[1].length > 1){ _aptv = _ckd[1]; } if(_cidv && _plidv && _actv && _aptv) break; }
    if(!_cidv && localStorage.getItem("CL_" + _PMTV)){ _cidv = localStorage.getItem("CL_" + _PMTV); _actv = "ls"; }
    if(_cidv){ _TRKU += "&" + _CIDN + "=" + _cidv; }
    if(!_plidv && localStorage.getItem("PL_" + _PMTV)){ _plidv = localStorage.getItem("PL_" + _PMTV); _aptv = "ls"; }
    if(_plidv){ _TRKU += "&" + _PLIDN + "=" + _plidv; }
    if(_actv){ _TRKU += "&" + _ACTN + "=" + _actv; }
    if(_aptv){ _TRKU += "&" + _APTN + "=" + _aptv; }
    img = document.body.appendChild(document.createElement("img"));
    img.src = _TRKU + "&t=abcdefg";
    }());
</script>

<?php include (get_user_header ()); ?>

<div class="main_space">
    <div class="container">
        <div class="page-header">
            <h1>無料体験レッスンお申し込み</h1>
        </div>
        <?php if ($tokenError === true) : ?>
            <div class="alert alert-danger text-center">正常な画面遷移ではありません。
                <br>お手数ですが、最初からやり直してください。
            </div>
        <?php else: ?>
        <ol class="step_bar step4">
            <li class="step"><?php echo $step1; ?></li>
            <li class="step"><?php echo $step2; ?></li>
            <li class="step"><?php echo $step3; ?></li>
            <li class="step current"><?php echo $step4; ?></li>
        </ol>
        <?php if (!$error_msg) : ?>
            <div class="message_area">
                <h2>予約登録完了</h2>
                <p>無料体験レッスンにお申し込み頂き、誠にありがとうございます。
                    <br>予約完了メールを送信させて頂きました。
                    <br>ご予約内容はTOPページからもご確認頂けます。
                </p>
            </div>
            <div class="domain">
                各携帯電話会社のセキュリティ設定や、お客様の迷惑メール対策等で、メールが正しく届かない場合がございます。<br>
                迷惑メールフォルダにメールが届いていないかをご確認頂き、届いていない場合は以下のドメインを受信できるようご対応をお願いいたします。
                <span><?php echo SUPPORT_DOMAIN ; ?></span><br>
                上記の対応をされてもメールが確認出来ない場合は、お手数ですが下記メールアドレスまでご連絡をお願いいたします。<br><br>
                <span><a href="mailto:<?php echo SUPPORT_EMAIL;?>"><img src="/images/email_white.png"></a></span>
            </div>
            <a href="/" class="btn btn-primary btn-lg center_link">ホーム</a>
        <?php else: ?>
            <div class="alert alert-danger"><?php echo $error_msg; ?></div>
            <a href="datetime.php" class="btn btn-primary btn-lg center_link">日時選択ページへ</a>
        <?php endif; ?>
        <?php endif; ?>
    </div>
</div>


<?php include (get_user_footer ()); ?>

<?php

// アフィリエイトデータをcurlで送信
function send_curl_affiliate_data($affiliate) {
    $parameter = explode(',', $affiliate->parameter);
    switch ($parameter[1]) {
        case 'ieltsa8':
            $pid = '&pid=s00000019054003&so=';
            $si  = '&si=500-1-500-a8&currency=JPY';
            break;
        case 'toefla8':
            $pid = '&pid=s00000019054002&so=';
            $si  = '&si=500-1-500-a8&currency=JPY';
            break;
        case 'multilanguage':
            $pid = '&pid=s00000019054001&so=';
            $si  = '&si=5000-1-5000-a8&currency=JPY';
            break;
    }
    $order_no = 'bh' . $affiliate->user_id . 'a8';
    $url = 'https://px.a8.net/a8fly/earnings?a8=' . $parameter[0] . $pid . $order_no . $si;

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    $res  = curl_exec($curl);
    curl_close($curl);

    // ログ出力
    $log = fopen(dirname(__FILE__)."/../../log/affiliate.txt", "a");
    if (!$log) {
        echo "Error: Open Log File, log.txt";
    }
    fwrite($log, date('Y-m-d H:i:s') . " Affiliate: A8. UserID: " . $affiliate->user_id . ". Response: " . $res . "\r\n");
    fclose($log);
}
?>

错误信息如下

img

img

想请教如何避免在成功输出错误信息的时候不报错的方法例如在得到错误信息时时session无效等等等等
(16, 18, 132行是对应的位置)

感谢解答与指教

  • 写回答

4条回答 默认 最新

  • CSDN专家-showbo 2021-10-27 20:43
    关注

    在页面最开始放下面这个代码关闭错误提示。

    <?php 
    error_reporting(0);////////////////////
    require_once(dirname(__FILE__)."/../../common/auth.php");
    require_once(dirname(__FILE__)."/../../common/defs_gen.php");
    require_once(dirname(__FILE__)."/../../common/user.php");
    

    或者判断session是否过期

    
    if ($_SESSION&&isset($_SESSION['course_id'])) {////isset判断是否存在course_id
    ///.....原来的代码
       
    }
    else echo "Session失效";
    
    
    评论

报告相同问题?

问题事件

  • 系统已结题 11月4日
  • 修改了问题 10月27日
  • 修改了问题 10月27日
  • 修改了问题 10月27日
  • 展开全部

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题