Проблема с передачей PHPSESSID в location.pathname в firefox
Уважаемые специалисты.
На сайте, над которым тружусь, для поддержания сессии всегда использовались куки, но тут возникла задач а в отдельных случаях передавать PHPSESSID через URL. В числе прочего на уровне PHP отключаю куки и включаю transsid и браузеры подхватывают сами большую часть. Но есть, среди прочего, в JS-коде такой редирект: location.pathname = '/cart/list/'; И несколько практически таких же. Соответственно, с учётом указанной выше настройки на выходе после такой команды получается что-то в виде: mysite.com/cart/list/?PHPSESSID=al5mlujofn8v24lcpg54ighgs6 Суть проблемы: Firefox, в отличие от всех остальных браузеров не подставляет в этом случае сессию. Т.е. имеем: mysite.com/cart/list/ В коде есть переменная, отвечающая за сессию и можно сделать, например, так: location.pathname = '/cart/list/'+((typeof(force_session_id) !== "undefined") ? '?PHPSESSID='+force_session_id : ''); Но тогда хром, например, делает вот это и вообще ломается: mysite.com/cart/list/?PHPSESSID=al5mlujofn8v24lcpg54ighgs6?PHPSESSID=al 5mlujofn8v24lcpg54ighgs6 Значит нужна ещё доп. проверка на конкретный браузер т.е. решение не универсальное (вдруг эта проблема ещё где-то всплывёт и нужно ещё проверки добавлять). Вопрос такой: можно ли как-то проще решить эту проблему? |
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Мало того что SID светится, так еще есть и роботы, а при каждой новой сессии url то будет меняться, а это уже плохо.
Гарантировано работает вне всяких неожиданностей явно прописанное <a href"=?<?=SID?>">Go</a>. |
Цитата:
Цитата:
Если бы решение "так не делать" было бы возможным, то не было бы и этого вопроса вообще. |
Вы же ситуацию то понимаете - куки отключены и клиент не знает о ней ничего. Именно сервер будет ее автоматом проставлять. SID, это константа, значение которой и есть PHPSESSID=xxxxxxxxxx.... естественно РНР автоматом и подставит, и только в том случае если определена трансляция SID при отключенных куках. В противном случае подстановки SID в url не будет, даже если в url явно прописано <?=SID?>.
На стороне клиента посредством js куда-то добавить можно, но только естественно автоматически этого не произойдет. |
Так в том-то и дело.
Трансляция SID включена. Куки отключены. При этом когда идёт такая команда: location.pathname = '/cart/list/'; SID в новый адрес подставляется автоматически. В хроме подставляется и в опере подставляется. А вот в firefox не подставляется почему-то. Вот я и хочу узнать или почему не подставляется или есть ли какое-то более универсальное решение чтобы везде подставлялось помимо того, чтобы сделать в JS тупо проверку на firefox и поставить самостоятельно? |
Так об этом и речь, всякие возможные проблемы на клиенте придется решать самому.
|
Так я и решаю. :)
Просто хочу узнать, нет ли более универсального решения, чем проверять на Firefox. |
Универсальное, это и есть трансляция SID, но не все гладко. Все остальное универсальным назвать сложно. Собственно если идентифицировать пользователя однозначно, как по отпечаткам пальцев, тогда бы и трансляции SID не требовалось да и сама сессия была бы не нужна, ее вполне бы можно заменить собственным механизмом на SQL.
|
Часовой пояс GMT +3, время: 21:08. |