Ignore:
Timestamp:
2007/01/19 23:01:05 (20 years ago)
Author:
rebelt
Message:

以下のモバイルサイト用ページ・機能を作成いたしました。

  • トップページ
  • 商品閲覧
  • 商品検索
  • セッションIDチェック機能
  • 簡単ログイン補助機能
  • 絵文字変換機能
Location:
temp/branches/mobile/data/include
Files:
3 added
1 edited

Legend:

Unmodified
Added
Removed
  • temp/branches/mobile/data/include/mobile.inc

    • Property svn:keywords deleted
    r10576 r11398  
    11<?php 
     2/** 
     3 * ¥â¥Ð¥¤¥ë¥µ¥¤¥È¶¦Í­´Ø¿ô¥Õ¥¡¥¤¥ë 
     4 */ 
     5 
     6/** 
     7 * EC-CUBE ¤¬¥µ¥Ý¡¼¥È¤¹¤ë·ÈÂÓüËö¤«¤É¤¦¤«¤ò¥Á¥§¥Ã¥¯¤¹¤ë¡£ 
     8 * ÈóÂбþüËö¤Î¾ì¹ç¤Ï unsupported/index.php ¤Ø¥ê¥À¥¤¥ì¥¯¥È¤¹¤ë¡£ 
     9 * 
     10 * @return void 
     11 */ 
     12function lfMobileCheckCompatibility() { 
     13    if (!GC_MobileUserAgent::isSupported()) { 
     14        header('Location: ' . URL_DIR . 'unsupported/index.php'); 
     15        exit; 
     16    } 
     17} 
     18 
     19/** 
     20 * ÆþÎϥǡ¼¥¿¤òÆâÉô¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ËÊÑ´¹¤·¡¢³¨Ê¸»ú¤ò½üµî¤¹¤ë¡£ 
     21 * 
     22 * @param string &$value ÆþÎϥǡ¼¥¿¤Ø¤Î»²¾È 
     23 * @return void 
     24 */ 
     25function lfMobileConvertInputValue(&$value) { 
     26    // Shift JIS ¤«¤éÆâÉô¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ËÊÑ´¹¤¹¤ë¡£ 
     27    // SoftBank °Ê³°¤Î³¨Ê¸»ú¤Ï³°»úÎΰè¤Ë´Þ¤Þ¤ì¤ë¤¿¤á¡¢¤³¤ÎÃʳ¬¤Ç½üµî¤µ¤ì¤ë¡£ 
     28    $value = mb_convert_encoding($value, CHAR_CODE, 'SJIS'); 
     29 
     30    // SoftBank ¤Î³¨Ê¸»ú¤ò½üµî¤¹¤ë¡£ 
     31    $value = preg_replace('/\\x1b\\$[^\\x0f]*\\x0f/', '', $value); 
     32} 
     33 
     34/** 
     35 * ¥â¥Ð¥¤¥ë¥µ¥¤¥ÈÍÑ¤ÎÆþÎϤνé´ü½èÍý¤ò¹Ô¤¦¡£ 
     36 * 
     37 * @return void 
     38 */ 
     39function lfMobileInitInput() { 
     40    array_walk($_GET, 'lfMobileConvertInputValue'); 
     41    array_walk($_POST, 'lfMobileConvertInputValue'); 
     42    array_walk($_REQUEST, 'lfMobileConvertInputValue'); 
     43} 
     44 
     45/** 
     46 * ¥Ñ¥é¥á¡¼¥¿¡¼¤«¤éÍ­¸ú¤Ê¥»¥Ã¥·¥ç¥óID¤ò¼èÆÀ¤¹¤ë¡£ 
     47 * 
     48 * @return string|false ¼èÆÀ¤·¤¿Í­¸ú¤Ê¥»¥Ã¥·¥ç¥óID¤òÊÖ¤¹¡£ 
     49 *                      ¼èÆÀ¤Ç¤­¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï false ¤òÊÖ¤¹¡£ 
     50 */ 
     51function lfMobileGetSessionId() { 
     52    // ¥Ñ¥é¥á¡¼¥¿¡¼¤«¤é¥»¥Ã¥·¥ç¥óID¤ò¼èÆÀ¤¹¤ë¡£ 
     53    $sessionId = @$_POST[session_name()]; 
     54    if (!isset($sessionId)) { 
     55        $sessionId = @$_GET[session_name()]; 
     56    } 
     57    if (!isset($sessionId)) { 
     58        return false; 
     59    } 
     60 
     61    // ¥»¥Ã¥·¥ç¥óID¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤ò¥Á¥§¥Ã¥¯¤¹¤ë¡£ 
     62    if (preg_match('/^[0-9a-zA-Z,-]{32,}$/', $sessionId) < 1) { 
     63        gfPrintLog("Invalid session id : sid=$sessionId"); 
     64        return false; 
     65    } 
     66 
     67    // ¥»¥Ã¥·¥ç¥óID¤Î¸ºß¤ò¥Á¥§¥Ã¥¯¤¹¤ë¡£ 
     68    if (sfSessRead($sessionId) === null) { 
     69        gfPrintLog("Non-existent session id : sid=$sessionId"); 
     70        return false; 
     71    } 
     72 
     73    return session_id($sessionId); 
     74} 
     75 
     76/** 
     77 * ¥»¥Ã¥·¥ç¥ó¥Ç¡¼¥¿¤¬Í­¸ú¤«¤É¤¦¤«¤ò¥Á¥§¥Ã¥¯¤¹¤ë¡£ 
     78 * 
     79 * @return boolean ¥»¥Ã¥·¥ç¥ó¥Ç¡¼¥¿¤¬Í­¸ú¤Ê¾ì¹ç¤Ï true¡¢Ìµ¸ú¤Ê¾ì¹ç¤Ï false ¤òÊÖ¤¹¡£ 
     80 */ 
     81function lfMobileValidateSession() { 
     82    // ÇÛÎó mobile ¤¬ÅÐÏ¿¤µ¤ì¤Æ¤¤¤ë¤«¤É¤¦¤«¤ò¥Á¥§¥Ã¥¯¤¹¤ë¡£ 
     83    if (!is_array(@$_SESSION['mobile'])) { 
     84        return false; 
     85    } 
     86 
     87    // Í­¸ú´ü¸Â¤ò²á¤®¤Æ¤¤¤Ê¤¤¤«¤É¤¦¤«¤ò¥Á¥§¥Ã¥¯¤¹¤ë¡£ 
     88    if (intval(@$_SESSION['mobile']['expires']) < time()) { 
     89        gfPrintLog("Session expired at " . 
     90                   date('Y/m/d H:i:s', @$_SESSION['mobile']['expires']) . 
     91                   ' : sid=' . session_id()); 
     92 
     93        return false; 
     94    } 
     95 
     96    // ·ÈÂÓüËö¤Îµ¡¼ï¤¬°ìÃפ¹¤ë¤«¤É¤¦¤«¤ò¥Á¥§¥Ã¥¯¤¹¤ë¡£ 
     97    $model = GC_MobileUserAgent::getModel(); 
     98    if (@$_SESSION['mobile']['model'] != $model) { 
     99        gfPrintLog("User agent model mismatch : " . 
     100                   "\"$model\" != \"" . @$_SESSION['mobile']['model'] . 
     101                   '" (expected), sid=' . session_id()); 
     102        return false; 
     103    } 
     104 
     105    return true; 
     106} 
     107 
     108/** 
     109 * ¥â¥Ð¥¤¥ë¥µ¥¤¥ÈÍѤΥ»¥Ã¥·¥ç¥ó´ØÏ¢¤Î½é´ü½èÍý¤ò¹Ô¤¦¡£ 
     110 * 
     111 * @return void 
     112 */ 
     113function lfMobileInitSession() { 
     114    // ¥»¥Ã¥·¥ç¥óID¤Î¼õ¤±ÅϤ·¤Ë¥¯¥Ã¥­¡¼¤ò»ÈÍѤ·¤Ê¤¤¡£ 
     115    ini_set('session.use_cookies', '0'); 
     116    ini_set('session.use_trans_sid', '1'); 
     117 
     118    // ¥Ñ¥é¥á¡¼¥¿¡¼¤«¤éÍ­¸ú¤Ê¥»¥Ã¥·¥ç¥óID¤ò¼èÆÀ¤¹¤ë¡£ 
     119    $sessionId = lfMobileGetSessionId(); 
     120 
     121    session_start(); 
     122 
     123    // ¥»¥Ã¥·¥ç¥óID¤Þ¤¿¤Ï¥»¥Ã¥·¥ç¥ó¥Ç¡¼¥¿¤¬Ìµ¸ú¤Ê¾ì¹ç¤Ï¡¢¥»¥Ã¥·¥ç¥óID¤òºÆÀ¸À® 
     124    // ¤·¡¢¥»¥Ã¥·¥ç¥ó¥Ç¡¼¥¿¤ò½é´ü²½¤¹¤ë¡£ 
     125    if ($sessionId === false || !lfMobileValidateSession()) { 
     126        session_regenerate_id(); 
     127        $_SESSION = array('mobile' => array('model'    => GC_MobileUserAgent::getModel(), 
     128                                            'phone_id' => GC_MobileUserAgent::getId(), 
     129                                            'expires'  => time() + MOBILE_SESSION_LIFETIME)); 
     130 
     131        // ¿·¤·¤¤¥»¥Ã¥·¥ç¥óID¤òÉղ䷤ƥê¥À¥¤¥ì¥¯¥È¤¹¤ë¡£ 
     132        if ($_SERVER['REQUEST_METHOD'] == 'GET') { 
     133            // GET ¤Î¾ì¹ç¤ÏƱ¤¸¥Ú¡¼¥¸¤Ë¥ê¥À¥¤¥ì¥¯¥È¤¹¤ë¡£ 
     134            require_once(DATA_PATH . 'module/Net/URL.php'); 
     135            $url = new Net_URL(); 
     136            $url->addQueryString(session_name(), session_id()); 
     137            header('Location: ' . $url->getURL()); 
     138        } else { 
     139            // GET °Ê³°¤Î¾ì¹ç¤Ï¥È¥Ã¥×¥Ú¡¼¥¸¤Ø¥ê¥À¥¤¥ì¥¯¥È¤¹¤ë¡£ 
     140            header('Location: ' . URL_SITE_TOP . '?' . SID); 
     141        } 
     142        exit; 
     143    } 
     144 
     145    // ·ÈÂÓüËöID¤ò¼èÆÀ¤Ç¤­¤¿¾ì¹ç¤Ï¥»¥Ã¥·¥ç¥ó¥Ç¡¼¥¿¤ËÊݸ¤¹¤ë¡£ 
     146    $phoneId = GC_MobileUserAgent::getId(); 
     147    if ($phoneId !== false) { 
     148        $_SESSION['mobile']['phone_id'] = $phoneId; 
     149    } 
     150 
     151    // ¥»¥Ã¥·¥ç¥ó¤ÎÍ­¸ú´ü¸Â¤ò¹¹¿·¤¹¤ë¡£ 
     152    $_SESSION['mobile']['expires'] = time() + MOBILE_SESSION_LIFETIME; 
     153} 
     154 
     155/** 
     156 * ¥â¥Ð¥¤¥ë¥µ¥¤¥ÈÍѤνÐÎϤνé´ü½èÍý¤ò¹Ô¤¦¡£ 
     157 * 
     158 * ½ÐÎϤÎή¤ì 
     159 * 1. Smarty 
     160 * 2. ÆâÉô¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤«¤é Shift JIS ¤ËÊÑ´¹¤¹¤ë¡£ 
     161 * 3. Á´³Ñ¥«¥¿¥«¥Ê¤òȾ³Ñ¥«¥¿¥«¥Ê¤ËÊÑ´¹¤¹¤ë¡£ 
     162 * 4. ³¨Ê¸»ú¥¿¥°¤ò³¨Ê¸»ú¥³¡¼¥É¤ËÊÑ´¹¤¹¤ë¡£ 
     163 * 5. ½ÐÎÏ 
     164 * 
     165 * @return void 
     166 */ 
     167function lfMobileInitOutput() { 
     168    // Smarty ÍѤΥǥ£¥ì¥¯¥È¥ê¡¼¤òºîÀ®¤¹¤ë¡£ 
     169    @mkdir(COMPILE_DIR); 
     170 
     171    // ½ÐÎÏÍѤΥ¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ò Shift JIS ¤Ë¸ÇÄꤹ¤ë¡£ 
     172    mb_http_output('SJIS-win'); 
     173 
     174    // ³¨Ê¸»ú¥¿¥°¤ò³¨Ê¸»ú¥³¡¼¥É¤ËÊÑ´¹¤¹¤ë¡£ 
     175    ob_start(array('GC_MobileEmoji', 'handler')); 
     176 
     177    // Á´³Ñ¥«¥¿¥«¥Ê¤òȾ³Ñ¥«¥¿¥«¥Ê¤ËÊÑ´¹¤¹¤ë¡£ 
     178    ob_start(create_function('$buffer', 'return mb_convert_kana($buffer, "k", "SJIS-win");')); 
     179 
     180    // ÆâÉô¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤«¤é Shift JIS ¤ËÊÑ´¹¤¹¤ë¡£ 
     181    ob_start('mb_output_handler'); 
     182} 
     183 
     184/** 
     185 * ¥â¥Ð¥¤¥ë¥µ¥¤¥ÈÍѤνé´ü½èÍý¤ò¹Ô¤¦¡£ 
     186 * 
     187 * @return void 
     188 */ 
     189function sfMobileInit() { 
     190    lfMobileInitInput(); 
     191 
     192    if (basename(dirname($_SERVER['SCRIPT_NAME'])) != 'unsupported') { 
     193        lfMobileCheckCompatibility(); 
     194        lfMobileInitSession(); 
     195    } 
     196 
     197    lfMobileInitOutput(); 
     198} 
    2199?> 
Note: See TracChangeset for help on using the changeset viewer.