cookie(クッキー)、session(セッション)、あとついでにDB
どうした
Webエンジニアとしてクソなのでcookieとsessionの使い分け方がよくわかんない
調べた
概念としての(webでいうところの)session
WWWサービスで使用されるHTTPでは、request(リクエスト)単位で処理が行われる。
sessionは、ユーザがwebサービスの利用を開始してから終了するまで(これは初回アクセスからブラウザを閉じるまでであったり、ログインしてからログアウトするまでであったり)の複数のrequestをまとめた単位であるように見える。
見えると書いたのは、ブラウザやwebサービスによってsessionの定義は異なるようだから。
sessionの管理(同一session単位内のrequestであることの特定・データの持ち越し)は、cookieを用いたクライアント側に保存する方法と、cookieではsession名とsession識別子を扱いサーバ側のsession管理機能を使用する方法がある。(その他にもやり方はある)
このサーバ側でsessionのデータを管理する方を単に「session」と呼んだりするときもあるので、私にはよくわからなかった。
cookie(クッキー)
クライアント側(ブラウザなど)に保存されるデータ。
基本的にrequest headerにのせてサーバへ送信され。response headerにのせてクライアント側に送信される。
その有効期限の指定の有無によって、取扱いを変えるブラウザがある。IEはPersistent cookiesとPer-session cookiesの二種類で扱う。
有効期限が指定されているPersistent cookiesはファイルで保存し、指定のないPer-session cookiesはメモリ上で管理しブラウザを閉じると消えてしまう。
この有効期限の指定のないcookieを、セッションクッキーと呼ぶ人もたまにいる。IEでのCookie設定のところや、firebugでもこのクッキーをセッションクッキーと呼ぶ箇所がある。
ただ、Cookie関係のRFCでは特にそういう呼び方はしていないことや、PHPではsession idを保持しているクッキーをセッションクッキーと呼ぶので、文脈に注意すること。
性質
cookieを使用することで、requestに以前のrequestで得られたデータをのせることができるため、requestとsession単位を紐付けることができる。
ブラウザ側ではブラウザを閉じるまで、サーバ側ではsession idが破棄されるまでなど、クライアント側でいうsession単位と、サーバ側でいうsession単位の考え方が異なることに注意。
最終アクセス日時を表示したり、掲示板のユーザ名を保存しておく軽い感じの使い方(消えてもいいし、ユーザで改変してもサービス側に不利益がない)
後述するサーバ側の機能としてのsessionは、クライアント側からsession idを貰う必要があるため、session idの保存は主にこのcookieで行われる。(サービス内のリンクのURLのパラメータなどにも入れることも可能だが、さらに容易に改変できる上URLが長くなるのでcookie使わない縛りでもない限りやらない)(WebStorageで保存している例はあるのだろうか)
session(セッション)
ここではサーバのsession管理機能について書く。
概念としてのsessionを取り扱うために、cookieを使用
サーバ側に保存されるデータであり、メモリ上に置かれたりmemcacheやredisなどに置かれたりする。
基本的には発行したsession idをクライアント側のcookieにのせ、以降はrequest headerにのっているsession idからクライアントを判別し、そのrequestとsession単位を紐付けることができる。
Smartyのregex_replaceで一致した部分を取り出す
解決策
PHP: preg_replace - Manual
つまりpreg_replaceのreplacementの仕様と同じく$nで指定すれば良い。
一部を切り抜きたい場合は、前後もマッチングしてやれば良い。
{assign var="origin_text" value="this is origin text."} {$origin_text}<br> {$origin_text|regex_replace:'/^(.*)(o.*t)(.*)$/':'$2'}<br>
this is origin text. <br> origin text <br>
ゲームマーケット2015秋で手に入れたもの
どうした
ゲームマーケットいってきた。
国内外のアナログゲーム(ボードゲームとかカードゲームとか)の即売会っすね。gamemarket.jp
企業の出してるものから同人のものまでいろいろある。
この時に手に入れたもので遊んだり出来たので感想を書いておく。
ひらがなセンテンス
yyyacooo.com
お題(「てんごく」とか「にんげん」とか)を決めてから、
山札からひらがな一文字のカードを引いていき、5x5のマス目に配置して埋めていく。
25文字で埋め終わったら、一筆書きでお題に沿った文章を完成させるゲーム。
山札から引くひらがなの運要素と、ひらがなを配置する場所による戦略性と、最後の大喜利要素が絡みあう良ゲーム。
どんなにひどくても大喜利で挽回出来たりするので好き。
四コマ妖精DX
4コマ妖精 - 豚小屋
お題を決めて、1コマ目をみんなで描き、投票制で決定し、2コマ目・3コマ目とつづけて4コマ漫画を完成させるゲーム。
人数が多ければ多いほど楽しい。
三人よれば文殊の知恵というが、意外とネタが被らないもので、個々人の個性が光る。
徹夜でやるとよい。
アソxベxシャリ
goccogames.com
ゲームじゃなくて本。
ボードゲーム界隈の人たちにインタビューした感じの本。
ひらがなセンテンスの作者の人のインタビューもある。
こんなゲームおもしろかったわ!みたいな話が載っているので、これで気になったゲームをこんど探してみようと思う。
固有名詞がバンバンでてくるが、用語解説がページ下についているので読みやすい。
Aコードでいこう
Saashi & Saashi — Aコードで行こう
パッケージがかわいかったので購入。
ジャズセッションをモチーフとしたカードゲーム。
残念ながら未だプレイ出来ていない。
最後に
やろうアナログゲーム
マーズ・アタック!
1996年 アメリカ
監督 ティム・バートン
主演 ジャック・ニコルソン
- 出版社/メーカー: ワーナー・ホーム・ビデオ
- 発売日: 2010/10/06
- メディア: Blu-ray
- 購入: 3人 クリック: 19回
- この商品を含むブログ (10件) を見る
- 出版社/メーカー: ワーナー・ホーム・ビデオ
- 発売日: 2011/09/07
- メディア: DVD
- クリック: 1回
- この商品を含むブログ (1件) を見る
火星人が来たのでアメリカがわいわいする話。もちろん戦争になる。
宇宙人が来て戦争になる映画は同年に(日本公開は年をまたぐけど)インデペンデンス・デイがあるんだけど、あっちがアメリカンジャスティスを喰らえ!アメリカ万歳!大統領万歳!に比べてこっちは偉そうな奴は大体「バーカ!死ね!」って感じで死んでいく。最高。
ポワワ銃で政府のおっさんや陸軍が緑や赤の骨(彩色した骨格模型)になっていくし、この未曾有の事態中にスケベ心だしてる奴ら(専門家のイケメン(ピアース・ブロズナン 007ゴールデンアイのボンド)と頭のゆるい美人キャスター、あとマイケル・J・フォックス)はもちろんひどい目にあう。クソだなって思うやつは大体死ぬ。安心できる。
全体的にB級映画のノリが漂うので、メリハリみたいなものはなくて全体を通すとダルさがあって(このシーンこんな長くいるか?みたいなのが多い)、真面目に見るものではなくけだるい休日の午後とかにだらだら見て欲しい。体調が悪い時に見る夢みたいな感じが得られる。
最高に褒められる点は出てくる女性がみんなエロいところ。明らかに頭の大きい「一体何星人の変装なんだ……」みたいな女とか、大統領の娘(ナタリー・ポートマンとかいう天使)とか、エジプト風の衣装着てるカジノの店員とか良かった。
あとトム・ジョーンズ役のトム・ジョーンズが良かった。また見たい。
RailsでDalliが使うmemcacheのポート番号を指定する
memcachedをrailsから使いやすくしてくれるgem Dalli
mperham/dalli · GitHub
ありがたい。でもmemcachedのポート番号を変更したとき、どうやって設定するんだろう。
手順
- config/environments/development.rb内のconfig.cache_storeを変更する
$ vim config/environments/development.rb
# memcached / dalli config.cache_store = :dalli_store, 'localhost:11212'
単純にサーバ指定してあげるところにポート番号も書いてあげれば良かった。
memcachedを同一サーバ上で異なるポートで複数走らせる on Ubuntu14.04
複数のmemcachedが欲しい
小規模な実験的開発なので、開発環境と本番環境が同一のサーバ上にある。
両方memcachedを使いたいけど、keyが同じだと混ざる。
環境名をkeyに入れるのもアレだなぁということで、memcachedを2つ走らせることにした。
調査
起動スクリプトと設定ファイルをcpしてポートの数だけ増やしたり、起動スクリプトを複数対応にしてあげたりしている。
起動スクリプトを見る。
$ cat /etc/init.d/memcached
FILES=(/etc/memcached_*.conf) # check for alternative config schema if [ -r "${FILES[0]}" ]; then CONFIGS=() for FILE in "${FILES[@]}"; do # remove prefix NAME=${FILE#/etc/} # remove suffix NAME=${NAME%.conf} # check optional second param if [ $# -ne 2 ]; then # add to config array CONFIGS+=($NAME) elif [ "memcached_$2" == "$NAME" ]; then # use only one memcached CONFIGS=($NAME) break; fi; done; if [ ${#CONFIGS[@]} == 0 ]; then echo "Config not exist for: $2" >&2 exit 1 fi; else CONFIGS=(memcached) fi;