Hi Mark.
Have been doing some digging and testing regarding this after some discussions with DrByte.
Firstly regarding your suggestion
if (isset($_POST[zen_session_name()])) {
zen_session_id($_POST[zen_session_name()]);
} elseif ( ($request_type == 'SSL') && isset($_GET[zen_session_name()]) ) {
zen_session_id($_GET[zen_session_name()]);
/* else if added Mjfb*/
} elseif (isset($_GET[zen_session_name()])) {
zen_session_id($_GET[zen_session_name()]);
}
The problem here is that propagating the $_GET opens up code to some session hijacking/fixation hacks. We allow it for SSL as there is other code to mitigate the hacks (e.g. SSL only cookies and session_regenerate on login)
Note.There are some other things that could be done to allow for this code change, but still mitigate against hacking.
The upshot is, that you are correct, that if a user has cookies disabled then they will get changing session id's and a useless catalog.
The workaround suggested is to turn on force cookie usage. This doesn't fix the changing id's but should warn the user if they have cookies turned off.
This warning is supposed to happen when they try to add something to the cart (and a few other places) but as you have pointed out when adding to cart, the user is redirected to the timeout page instead.
This is a bug, and seems to have been caused by the introduction of csfr token checking (again this is security code meant to mitigate against other hacks)
It was our intention at some point to make Force Cookie Usage a default at some point, and maybe we should have done this earlier in the v15 code. It would have probably raised the timeout issue much earlier.
I'm going to raise this issue as part of our v1.6.0 code, however the intention would be to backport changes into v1.5.x.
I will update this thread once I have committed code to Github