Сеанс теряется и создается как новый в каждом запросе сервлета

Это из дублированного вопроса

$json = '[   
{"product_id":"63","product_batch":"BAtch1","product_quantity":"50","product_price":"200","discount":"0","net_price":"20000"},    
{"product_id":"67","product_batch":"Batch2","product_quantity":"50","product_price":"200","discount":"0","net_price":"20000"}
]';

$array = json_decode($json, true);

$out = array_map(function ($product) {
  return array_merge([
    'price'    => $product['product_price'],
    'quantity' => $product['product_quantity'],
  ], array_flip(array_filter(array_flip($product), function ($value) {
    return $value != 'product_price' && $value != 'product_quantity';
  })));
}, $array);

var_dump($out);

https://repl.it/@Piterden/Replace-keys-in-array

35
задан BalusC 26 January 2010 в 11:21
поделиться

4 ответа

Один из возможных причин для этого имеет «голый» имя хоста (то есть один без доской части). Это довольно распространено, если вы работаете в интрасети.

Проблема в том, что почти все браузеры не будут принимать файлы cookie для хостов без доменного имени. Это сделано для того, чтобы предотвратить evilsite.com от установки cookie для COM (что было бы плохо, поскольку это будет конечное отслеживание cookie).

Итак, если вы получите доступ к вашему заявлению через http: // examplehost / Это не примет не примет файл cookie, а для http: //examplehost.localdomain/ . и вернуть) печенье просто хорошо.

Немательная вещь в том, что сервер не может различать «браузер, получил файл cookie и проигнорировал его», а «браузер никогда не получил файл cookie». Таким образом, каждый один доступ будет выглядеть как совершенно новый сессон на сервер.

39
ответ дан 27 November 2019 в 05:36
поделиться

Попробуйте добавить плагин Live Http Headers в Firefox, и убедитесь, что сессионный cookie действительно передается браузеру с сервера, и убедитесь, что браузер отправляет его обратно при следующем запросе.

3
ответ дан 27 November 2019 в 05:36
поделиться

Пожалуйста, проверьте, если сеанс не является недействительным в вашем коде. Ищите код, похожий на request.getsession (). Invalidate ();

3
ответ дан 27 November 2019 в 05:36
поделиться

Сначала проверьте, не настроен ли в webapp'е context.xml не cookies="false".

Далее полезно знать, что cookie-файлы зависят от домена, порта и контекстного пути. Если ссылки на странице указывают на другой домен, порт и/или контекстный путь в отличие от текущего URL запроса (тот, который вы видите в адресной строке браузера), то куки не будут передаваться, что приведет к тому, что сессия больше не сможет быть идентифицирована, и, таким образом, вы получите новую сессию из сервлетконтейнера.

Если причина не в этом, то проверьте, не делаете ли вы по каким-то причинам перенаправление на каждый запрос, используя HttpServletResponse.sendRedirect(). Если вы сделаете это уже на самом первом запросе, то куки-файл будет потерян. Вам необходимо заменить

response.sendRedirect(url);

на

response.sendRedirect(response.encodeRedirectURL(url));
6
ответ дан 27 November 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: