会員登録せずに、お気に入り機能や、コメント履歴などを管理する方法。


会員登録せずに、お気に入り機能や、コメント履歴などを管理する方法について教えて下さい。  
言語はPHPを想定し、個人情報は取り扱わない方向で。

通常こういったサービスはユーザー登録を登録させて、ログインした状態で使えるようにすると思いますが、簡易的に行うにはどうしたらよいでしょうか。  
`md5("一意のID")`としてハッシュ化したセッションIDをクッキーかローカルストレージに持たせて管理して大丈夫でしょうか。




基本的には、おっしゃるように通常のセッションと同様に ランダムなID を発行し、それをブラウザに記録させる方法を用いれば問題ないかと思います。

もちろん、Cookie や WebStorage
を用いた場合、設定された期限が来たり、ブラウザが変わったりした場合などでそのIDが取得できなくなりますので、情報を継続できなくても問題の無いような場合のみでしかこのような方法は使えません。

また、閲覧履歴やお気に入り等のみを保持する場合は、もっと簡易的に、Cookieに直接その情報を詰め込んでも構わないかと思います。  
ただし、Cookie や WebStorage
には容量制限があることと、また、これらの情報はユーザー自身などによって書き換えることも可能で、インジェクション等が行われてしまう場合がありますので、それらに注意する必要があります。

# IDの生成方法について

他の方も書いていますが、`md5("一意のID")` などのようにした場合、第三者などが推測可能な文字列となります。  
これは個人情報が取り扱われていなくても、なりすましや攻撃などが容易に行えるため、セッションIDと同じように予測できないランダムな文字列が望ましいです。

また、`uniqid()` や
`rand()`、`mt_rand()`などは暗号学的に安全な乱数生成器ではありませんので、もし利用出来るのであれば、以下の何れかの方法でのID生成をオススメします。

## [`openssl_random_pseudo_bytes()`
関数](http://php.net/openssl_random_pseudo_bytes)

[code]

    $id = bin2hex(openssl_random_pseudo_bytes(16))
    
[/code]

## `/dev/urandom`

[code]

    $id = bin2hex(file_get_contents('/dev/urandom', false, null, 0, 16));
    
[/code]

