32497


**session_nameとセッション IDの関係性が良く分からないのですが**

* * *

**Q1**  
・「セッション名」と「セッションID」は紐付いているのでしょうか？  
・「セッション名」を変更したら「セッションID」も変更される？  
・そもそも「セッション名」変更とかあり得ない？ 破棄して新規作成と同じ？

* * *

**Q2**  
・「セッション名」を数字だけで構成していた場合、もしくは「セッション名」に文字が一つもない場合というのは、例えばどんな時でしょうか？

・下記を実行すると、新規セッション IDが生成されるのでしょうか？  
・新規session_start()と同じ？  
・既存セッションはそのまま継続？？

[code]

    session_name(123);
    
[/code]

* * *
[code]

    session_name();
    
[/code]

> セッション名は数字だけで構成することはできません。 少なくとも文字がひとつ以上現れる必要があります。そうでない場合、 新規セッション ID  
>  が毎回生成されます

[session_name](http://php.net/manual/ja/function.session-name.php)


CC BY-SA 3.0
2017-02-08T09:09:23.747
32495
2017-02-08T09:59:00.567
7886
question
php
セッション名を上書き設定(変更？)したら、セッション IDも変更されるのでしょうか？


セッション名はCookieなどでセッションを扱う時のキーとなるものです。

デフォルト値は`PHPSESSID`で、この状態でsession_idがexampleのセッションを発行すると`PHPSESSID=example`のCookieが発行されるわけです。  
Cookieの扱えないブラウザ(一部の携帯電話など)用にgetクエリとして含めることもあります。

途中でセッション名を変更した場合、そのセッション名に対応するCookieは **ないはず**
なので結果として新しいセッションが開始され、セッションIDも新しくなります。

* * *

Q2 については試してみるのが手っ取り早いとおもいます。

Shellの場合、

[code]

    >>> session_name('test')
    => "PHPSESSID"
    >>> session_name()
    => "test"
    >>> session_name(123)
    PHP warning:  session_name(): session.name cannot be a numeric or empty '123' on line 1
    >>> session_name()
    => "test"
    >>> session_name()
    => "test"
    >>> session_name('123')
    PHP warning:  session_name(): session.name cannot be a numeric or empty '123' on line 1
    >>> session_name()
    => "test"
    >>> session_name('')
    PHP warning:  session_name(): session.name cannot be a numeric or empty '' on line 1
    >>> session_name()
    => "test"
    >>>
    
[/code]

警告が出ますが、結果としては変更されていないようです。


CC BY-SA 3.0
2017-02-08T09:43:11.333
32497
2017-02-08T09:59:00.567
2017-02-08T09:59:00.567
2376
2376
32495
answer