2016-11-16 4 views
0

Ive는 고객 웹 사이트에 로그인하기위한 스크립트를 작성했습니다. 모든 것은 잘 작동하지만, 나는 그들이 사용하는 계정에서 부실 세션을보고 있다는 것을보고했다. 나는 내 googlefu가 아무 것도 돌려주지 않을 때 이것을 고치는 방법에 대한 손실이있다. 필자는 너무 오랫동안이 쳐다보고 그냥 올바른 방향으로 날 조금씩 이동하는 눈의 다른 세트를 필요로하고Invoke-WebRequest 세션 나가기

$c = Get-Credential -credential ${CREDENTIAL} 

$loginbase = 'http://${IP}' 
$loginURL = $loginbase + '/AdminTools/querybuilder/' 
$r = Invoke-WebRequest -Uri ($loginURL + 'logonform.jsp') -SessionVariable session 

$form = $r.Forms[0]; 

$form.Fields['aps'] = '${Node.DNS}:6400'; 
$form.Fields['usr'] = $c.Username; 
$form.Fields['pwd'] = SecureStringToString $c.Password; 

$r = Invoke-WebRequest -Uri ($loginURL + $form.Action) -Method POST -Body $form.Fields -WebSession $session; 

: 여기에 내가 쓴 코드입니다.

문제가 발생하면이 스크립트를 sessionvariable의 유무와 상관없이 실행했습니다. 처음에는 세션이 세션을 열어 두었고 다시 로그인을 시도 할 때 재사용된다는 것이 었습니다. 또한 모니터링 솔루션의 일부이기 때문에 120 초마다 로그인을 시도하도록 설정되어 있습니다.

+2

그들은 "부실 세션"을 어떻게 정의합니까? 세션을 종료하기 위해 로그 아웃하거나 다른 조치를 취하기를 기대합니까? 컨텍스트에서 "세션"이란 무엇입니까 (HTTP는 상태 비 저장이므로)? 그들은 "부실 세션"을 남겨 두지 않는 수단으로 무엇을 제안 했습니까? – alroc

+0

그들은 36 개의 활성 세션이있는 계정을 강조하는 스크린 샷을 보냈습니다. 나는 이것들을 가지고 아무것도하지 않고, 스크립트가 끝나자 마자 세션이 끝났다고 생각했다. 그래서 나는이 질문에 답하기 위해 계정이 웹 사이트에 많은 횟수로 기록되었다고 생각합니다. – Resin

+1

그런 다음 WebRequest를 호출하여 로그 아웃하는 메서드를 호출해야하는 것처럼 들립니다. 그 웹 사이트를 운영하는 사람은 당신이해야 할 일을 알려줄 필요가 있습니다. – alroc

답변

0

세션이 웹 서버의 무언가에 의해 유지 관리되기 때문에 스크립트는 웹 서버가 세션을 종료 할 수 있도록 "로그 아웃"조치를 취해야합니다. 해당 웹 사이트의 관리자는 해당 로그 아웃 작업을 수행 할 요청을 호출하고 해당 서버의 모든 리소스를 정리할 수있는 URL을 가져야합니다.