2009年10月

2009年10月30日

こんばんは、コレエダです。新しいページを作成しました。

お世話になっている方々、会社、私たちが制作にかかわったサイト、自社サービスとして展開しているサービスなど、まとめてリンクにしました。

興味があるかたは是非のぞいてください。

→こちらから

koreedablog at 20:29コメント(0)トラックバック(0) 
日記 

2009年10月06日

こんにちは、コレエダです。たまには夕方に更新します。

今回はPHPでのセッションの破棄についてです。

前回お話した「おもいついったー」みたいなログインを作ったら、次はログアウトが作りたくなりました。

とはいっても、単純にセッション破棄してトップ画面に戻るだけです。

Twitter利用したアプリのログイン状態はセッションで管理しているので、そのセッション破棄すればログアウトでしょ?あれ、そうですよね?

ということで、以下セッション破棄のコードです。

<?php
session_start();

// セッション変数解除
$_SESSION = array();

// セッションクッキー削除
if (isset($_COOKIE[session_name()])) {
    setcookie(session_name(), '', time()-42000, '/');
}

// セッション破棄
session_destroy();

//トップページにリダイレクト
header("Location: http://〜");

?>

ちなみにセッション破棄については「PHPセッション完全に破棄する方法」に非常にわかりやすくまとめてありました。

上記のソースコードもこの記事を参考にさせていただきました。

あ、ついでにひとつ。
セッションを使用する場所では「session_start()」関数を呼びます。
破棄をするときも例外ではありません。

session_start()関数を呼ばずにsession_destroy()を呼ぶとWarningが出ます。

@session_destroy()とするとWarningは消えますが、もちろん解決しているわけではありません。


koreedablog at 16:31コメント(0)トラックバック(0) 
作品制作 

2009年10月03日

こんばんは、コレエダです。みなさん、カヤックさんが運営されている「おもいついったー」というサービスをご存知でしょうか?

そこにログインボタンがあって、押下するとTwitterの認証へ行き、ログインするとまたトップページに戻ってきて、おもいついったーにログインしている状態になります。

なんだこれ?どうなってんの??と思ったのでやってみました。

まず、この仕組みはOAuth(オーオウス?)という認証システムを利用しています。Basic認証に替わるもので、あまり詳しく調べてないんですが、なんかよいみたいです(笑)

とりあえず、TwitterでOAuth認証を使用するための登録をします。
手順はPHP+OAuthでTwitter」を見てください。

一部違うのは、最後に"Application Type"
"Client"に変更せずに、"Browser"のままにしておくところです。

そして「oauth_test.php」も書き換えて使用するので、削除しないでください。

ここまでオッケーですか?

では、最後に、私がちょっと手を加えた「oauth_test.php」を以下に。。。

<?php
// require twitterOAuth lib
require_once('twitterOAuth.php');

/* Sessions are used to keep track of tokens while user authenticates with twitter */
session_start();
/* Consumer key from twitter */
$consumer_key = 'あなたのconsumer_key';
/* Consumer Secret from twitter */
$consumer_secret = 'あなたのconsumer_secret';

/* Set up placeholder */
$content = NULL;
/* Set state if previous session */
$state = $_SESSION['oauth_state'];
/* Checks if oauth_token is set from returning from twitter */
$session_token = $_SESSION['oauth_request_token'];
/* Checks if oauth_token is set from returning from twitter */
$oauth_token = $_REQUEST['oauth_token'];
/* Set section var */
$section = $_REQUEST['section'];

/* Clear PHP sessions */
if ($_REQUEST['test'] === 'clear') {/*{{{*/
  session_destroy();
  session_start();
}/*}}}*/

/* If oauth_token is missing get it */
if ($_REQUEST['oauth_token'] != NULL && $_SESSION['oauth_state'] === 'start') {/*{{{*/
  $_SESSION['oauth_state'] = $state = 'returned';
}/*}}}*/

/*
 * Switch based on where in the process you are
 *
 * 'default': Get a request token from twitter for new user
 * 'returned': The user has authorize the app on twitter
 */
switch ($state) {/*{{{*/
  default:
    /* Create TwitterOAuth object with app key/secret */
    $to = new TwitterOAuth($consumer_key, $consumer_secret);
    /* Request tokens from twitter */
    $tok = $to->getRequestToken();

    /* Save tokens for later */
    $_SESSION['oauth_request_token'] = $token = $tok['oauth_token'];
    $_SESSION['oauth_request_token_secret'] = $tok['oauth_token_secret'];
    $_SESSION['oauth_state'] = "start";

    /* Build the authorization URL */
    $request_link = $to->getAuthorizeURL($token);

    /* Build link that gets user to twitter to authorize the app */
    header("Location: ".$request_link);
    exit;
  case 'returned':
    /* If the access tokens are already set skip to the API call */
    if ($_SESSION['oauth_access_token'] === NULL && $_SESSION['oauth_access_token_secret'] === NULL) {
      /* Create TwitterOAuth object with app key/secret and token key/secret from default phase */
      $to = new TwitterOAuth($consumer_key, $consumer_secret, $_SESSION['oauth_request_token'], $_SESSION['oauth_request_token_secret']);
      /* Request access tokens from twitter */
      $tok = $to->getAccessToken();

      /* Save the access tokens. Normally these would be saved in a database for future use. */
      $_SESSION['oauth_access_token'] = $tok['oauth_token'];
      $_SESSION['oauth_access_token_secret'] = $tok['oauth_token_secret'];
    }

    header("Location: http://〜あなたのサイトのトップなど。ログイン後に表示させたいページ");
    exit;
}/*}}}*/
?>

ログインボタンの飛び先が、この改造した「oauth_test.php」になるようにすればオッケーです。

あとは、セッションを見て、$_SESSION['oauth_access_token']と、$_SESSION['oauth_access_token_secret']があればログイン中にして、ログインボタン非表示とかにすればいいんじゃないかと思います。

また、セッションを使用するところでは全て<?php session_start(); ?>を忘れずに入れておきましょう。

koreedablog at 22:39コメント(0)トラックバック(0) 
作品制作 
livedoor プロフィール

koreedablog

記事検索