Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблема с передачей PHPSESSID в location.pathname в firefox (https://javascript.ru/forum/misc/59438-problema-s-peredachejj-phpsessid-v-location-pathname-v-firefox.html)

temnykk 11.11.2015 11:49

Проблема с передачей 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

Значит нужна ещё доп. проверка на конкретный браузер т.е. решение не универсальное (вдруг эта проблема ещё где-то всплывёт и нужно ещё проверки добавлять).

Вопрос такой: можно ли как-то проще решить эту проблему?

laimas 11.11.2015 11:59

Цитата:

Сообщение от temnykk
но тут возникла задач а в отдельных случаях передавать PHPSESSID через URL.

Зачем?

Цитата:

Сообщение от temnykk
включаю transsid

Ее наоборот желательно отключать.

temnykk 11.11.2015 12:06

Цитата:

Сообщение от laimas (Сообщение 395659)
Зачем?

Это довольно долгая история.

Цитата:

Сообщение от laimas (Сообщение 395659)
Ее наоборот желательно отключать.

Знаю и уже написал, что обычно всё делается через куки. Но вот есть просто ситуация, в которой куки не работают и нужно передавать sid напрямую.

laimas 11.11.2015 13:41

Мало того что SID светится, так еще есть и роботы, а при каждой новой сессии url то будет меняться, а это уже плохо.

Гарантировано работает вне всяких неожиданностей явно прописанное <a href"=?<?=SID?>">Go</a>.

temnykk 11.11.2015 14:54

Цитата:

Сообщение от laimas (Сообщение 395677)
Гарантировано работает вне всяких неожиданностей явно прописанное <a href"=?<?=SID?>">Go</a>.

А в JS можно использовать подобное? В этом собственно и вопрос - можно ли в location.pathname прописать такую конструкцию, чтобы в случае наличия SID оно всегда учитывалось.


Цитата:

Сообщение от laimas (Сообщение 395677)
Мало того что...

Я всё понимаю, спасибо.
Если бы решение "так не делать" было бы возможным, то не было бы и этого вопроса вообще.

laimas 11.11.2015 16:29

Вы же ситуацию то понимаете - куки отключены и клиент не знает о ней ничего. Именно сервер будет ее автоматом проставлять. SID, это константа, значение которой и есть PHPSESSID=xxxxxxxxxx.... естественно РНР автоматом и подставит, и только в том случае если определена трансляция SID при отключенных куках. В противном случае подстановки SID в url не будет, даже если в url явно прописано <?=SID?>.

На стороне клиента посредством js куда-то добавить можно, но только естественно автоматически этого не произойдет.

temnykk 11.11.2015 17:16

Так в том-то и дело.

Трансляция SID включена. Куки отключены.

При этом когда идёт такая команда:
location.pathname = '/cart/list/';

SID в новый адрес подставляется автоматически.

В хроме подставляется и в опере подставляется. А вот в firefox не подставляется почему-то.

Вот я и хочу узнать или почему не подставляется или есть ли какое-то более универсальное решение чтобы везде подставлялось помимо того, чтобы сделать в JS тупо проверку на firefox и поставить самостоятельно?

laimas 11.11.2015 17:33

Так об этом и речь, всякие возможные проблемы на клиенте придется решать самому.

temnykk 11.11.2015 18:03

Так я и решаю. :)

Просто хочу узнать, нет ли более универсального решения, чем проверять на Firefox.

laimas 12.11.2015 06:26

Универсальное, это и есть трансляция SID, но не все гладко. Все остальное универсальным назвать сложно. Собственно если идентифицировать пользователя однозначно, как по отпечаткам пальцев, тогда бы и трансляции SID не требовалось да и сама сессия была бы не нужна, ее вполне бы можно заменить собственным механизмом на SQL.


Часовой пояс GMT +3, время: 23:45.