Drupal 6のセッション管理(1)

先日のブログでも少し書いたけど、日本の携帯電話でDrupalは本当に使いにくい。閲覧だけなら、何とかなるのですが、やっぱり編集もしたいという要望も実際にあります。電子メールを使ったブログ投稿ならすぐにできそうですが、将来的にeコマースなどを実現しようと思うと、セッション管理周りはできるように拡張した方がやりやすい。そこでまずDrupalのセッションの管理方法についてコードハックしていきたいと思います。

まず、Drupalのページがどうやって作られるか調べておく必要がありますね。bootstrap.inc を見ればわかるんだけど、

  1. 設定の初期化
  2. データベース以外のキャッシュを取得
  3. データベース・レイヤーの初期化
  4. アクセスが禁止されているホストの判定と拒否
  5. セッション・ハンドリングを初期化
  6. bootstrap.inc と module.inc を読込み、複数のシステムを開始し、キャッシュからページを提供できるか試します。
  7. ページの言語を決定
  8. $_GET['q']に、リクエストのDrupal パスを設定
  9. Drupalを読込完了。

という順番で実行されます。セッションのハンドリングは5番目なんですね。では、そのセッション・ハンドリングの生成って何しているのかっていうと、以下の通りです。

require_once variable_get('session_inc', './includes/session.inc');
session_set_save_handler('sess_open', 'sess_close', 'sess_read', 'sess_write', 'sess_destroy_sid', 'sess_gc');
session_start();

つまり、セッション関連の関数を読み込んで、ハンドラーを定義登録して、セッションIDを生成しているだけなんですね。じゃ、このハンドラーを携帯用に作り替えれば済むんじゃないだろうかという発想ができるわけです。さらに、session.incを読み込むところに、わざわざvariable_getを使って独自に設定出来る余地を残しています。ということは、「1.設定の初期化」の時点で上書きしてしまえば、良いわけですから、Drupalコアをほぼ修正せずに何らかの新しいセッション維持方法を制作できそうですね。

次回は、携帯電話のセッション管理に研究して、まとめてみます。

 

ソーシャル・リンク

コメント

新しいコメントの投稿

このフィールドの内容は非公開にされ、公表されることはありません。

書式オプションに関するより詳しい情報...

CAPTCHA
このフォームは投稿者が人間であるかどうか確認し、自動的なスパム投稿を妨げるために実施しています。
Image CAPTCHA
Enter the characters shown in the image.

 

Drupal Association Organisation Member

お奨めサイトフィード

Drupal ブログ

Walnutsスタッフブログ

コンテンツ配信

ウィジェット