Smartyのtpl側でセッションの値が参照できない - PHPプロ!Q&A掲示板

2648

  • 0P

Smartyのtpl側でセッションの値が参照できない

質問日時 / 2010年3月31日 02:01    回答数 / 2件

Questioner:  yamander  このエントリーをはてなブックマークに追加 

キーワード / Smarty    session   

質問させていただきます。

PHP側で$_SESSION['hoge']は参照できるのに、Smartyの.tpl側で{$smarty.session.hoge}が参照できません。

環境

さくらレンタルサーバ

FreeBSD 7.1-RELEASE-p8 i386 
Apache/1.3.42 (Unix) 
PHP 5.2.12 
Smarty 2.6.25 
どなたかご教授ください。お願いします。

施してみたこと

セッションIDを手動でsesにしてみた(変化なし) 
コンパイル済みのテンプレートファイルを削除して再生成(変化なし) 
mod_rewriteを疑い、rewriteが無関係なページでsessionのテスト(ここでも参照出来ず) 
php.iniを確認。(文字エンコやインクルードパスの設定のみなので思い当たる所なし。) 

処理の流れとしては、
1.login.phpで認証処理、認証できればセッションに名前などを格納。
2./tr/homeへリダイレクト
3.メニューを表示
です

  1. <?php
  2. require("smarty/Smarty.class.php");
  3. require("MDB2.php");
  4.  
  5. class MySmarty extends Smarty{
  6.   private $_db;
  7.  
  8.   public function __construct(){
  9.     $this->Smarty();
  10.     $this->template_dir="~~php/smarty/templates/";
  11.     $this->compile_dir="~~php/smarty/templates_c/";
  12.     $this->config_dir="~~php/smarty/config/";
  13.     $this->config_load("config.conf",basename($_SERVER['SCRIPT_NAME'],".php"));
  14.     $this->caching=2;
  15.     $this->cache_dir="~~php/smarty/cache/";
  16.     $this->cache_lifetime=60*15;
  17.     //$this->security=False;
  18.  
  19.     $dsn=array("phptype"=>"***","username"=>"***","password"=>"***","hostspec"=>"***","database"=>"***");
  20.     $this->_db=MDB2::connect($dsn);
  21.     $this->_db->query("SET NAMES utf8");
  22.   }
  23.  
  24.   public function __destruct(){
  25.     $this->_db->disconnect();
  26.   }
  27.  
  28.   public function getDb(){
  29.     return $this->_db;
  30.   }
  31. }
  32. ?>

  1. <?php
  2. //login.php
  3. //~~略~~
  4. if($mb->getObject()->isDoCoMo()){  //docomoならばTrue
  5.   ini_set('session.auto_start'0);
  6.   ini_set("session.use_cookies",0);
  7.   ini_set("session.use_trans_sid",1);
  8.   ini_set("session.name""ses");
  9.   if(isset( $_GET['ses'])){
  10.     $sessionId = $_GET['ses'];
  11.     session_id($sessionId);
  12.   }
  13. }
  14.  
  15. //~~略~~
  16.  
  17. session_start();
  18. $_SESSION['name'] = $data['name'];
  19.  
  20. if($mb->getObject()->isDoCoMo()){  //端末がdocomoならTrue
  21.   header("Location: /tr/home?guid=ON&".session_name()."=".strip_tags(session_id()));
  22. }else{
  23.   header("Location: /tr/home?guid=ON");
  24. }
  25. ?>
  1. //home.tpl
  2. {include file="mobile/common/header.tpl"}
  3. {$smarty.session.name}さんのマイページ     //null
  4. <hr>
  5. <ol style="padding:0 5px;">
  6. <li><a href="/tr/gps?guid=ON" accesskey="1">メニュー1</a></li>
  7. <li><a href="/tr/friend?guid=ON" accesskey="2">メニュー2</a></li>
  8. <br />
  9. <li><a href="/tr/logout?guid=ON">ログアウト</a></li>
  10. </ol>
  11. <hr>
  12. {include file="mobile/common/footer.tpl"}

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01yamander質問者本人です。 原因はSmarty2.6.25自体のバグで
┗A02galluがると申します。 解決したところで恐縮ではあるの

回答一覧

並び替え:

A01
answereryamander [3月31日 17:55]

質問者本人です。

原因はSmarty2.6.25自体のバグでした。

2.6.26にバージョンアップしたところ正常に参照できました。

お騒がせしました・・・

この意見に回答する

ツリーへ TOPへ

A02
answerergallu [3月31日 22:54]

がると申します。

解決したところで恐縮ではあるのですが。
Smartyは「テンプレートエンジン」で、テンプレートエンジンの意義が「ロジックとデザインの分離」であるとするのならば。
Smarty側で「セッション情報を見る」のは、あまり好ましくないと思うのですが如何でしょうか?

ちと気になりましたもので一筆。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
マジッククォートとmysql_real_escape_string
 このエントリーをはてなブックマークに追加 
A
magic_quotes_gpcでは、SQLインジェクション対処は十分できません。主な理由として、以下が上げられます。 ・magic_quotes_gpcは文字コードを考慮しないで処理するので、Shift_JISを使っている場合、SQLインジェ...

>>続きを読む

SQLインジェクション対策は時と場合で使う関数が変わります。その時にあったものを使いましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)