On 8/13/16 9:02 PM, Yasuo Ohgaki wrote:
Hi Tom,

On Sun, Aug 14, 2016 at 12:35 AM, Tom Worster <f...@thefsb.org> wrote:
Rather than argue the details of randomness, I have more basic comments.

1. If an app needs to access session values, it can and should do this
without indirection through the PHP session ID table.

I don't get point. Why?

1) It is not necessary. An app can instead store session-related data in a DB that provides lookup and/or search on the session data itself rather than the PHP session key. Lester Caine described this.

2) Searching PHP's session database is nasty. It's low-level and the app has to understand the handler. But I want apps to work independent of sessions being in memcache to Redis or Galera or whatever. Depending on handler, it can involve a scan which is slow. And it's hard to make the overall operation that uses session table lookup transnational. And the session store may be distributed example below(*).

So it's nasty **and** unnecessary. Instead, the app can and should implement the business logic to be entirely above and ignorant of PHP session mechanics.


2. Users should generally let PHP choose random IDs.

I agree.


3. If PHP is to allow a user to chose its own session IDs, avoiding
collision is should that user's responsibility.

No. I've already explained why this is difficult.

It is easy if you choose to **avoid** rather than **detect**. Use a random component long enough for your needs. In other words, I disagree with the sentence in your RFC:

> Something like above code is required to implement recommended user session save handlers currently.

It is not needed because if 64^32 SID values is inadequate for your app then you may increase session.sid_length.


Please read previous mail.
Or try to write session save handler that detects collisions with
memcached, then you'll see why.

I understand your point. At the same time I see no need for collision detection.

Questions: When I get a value from session_create_id(), what kind of guarantee comes with it? Is the ID reserved for me? If so, for how long?


4. Generating unique unpredictable IDs (without requiring collision
detection) is a common problem with known and trusted solutions.

I agree. It's common because many unique ID generator do not have
centralized database to avoid collisions. In contract, session has
centralized database and it's just a matter of one lookup. (Therefore,
session module should lookup database)

(*)Some session stores are federated, e.g. a cluster of 3 hosts each with a memcached server and each with PHP configured with session redundancy to save two copies.

While session_create_id() could potentially use the same hashes that memcache/d extensions uses to associate SIDs with memcached servers, the app has to search them to find the entry with a given SID prefix.


Regards,

P.S. I'll add optimization that eliminates SID validation lookup for
normal operations. You don't have to worry about session performance
if I add this.


--
Yasuo Ohgaki
yohg...@ohgaki.net



--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to