Jump to content

cannot set $oDoc.cookie


Recommended Posts

I'm trying to first get a cookie and then replace a certain server Id with a new one. This is to test each application server for our internal application.

The following is my function of interest:

Func checkAppServer($id)

debug("checking app server for id " & $id)

;access application with app server cookie
ShellExecute("iexplore.exe", "about:blank")
WinWait("Blank Page")
Local $oIE = _IEAttach("about:blank", "url")
_IELoadWait($oIE)
_IENavigate($oIE, "https://application.example.com")
If @error Then
alert("Login checker failed to access application.")
Return
EndIf

;get the document
Local $oDoc = _IEDocGetObj($oIE)
If @error Then
alert("Login checker failed to get the document object.")
Return
EndIf

;get current cookies
$newCookies = $oDoc.cookie
debug("current cookie string: " & $newCookies)

;replace all app server IDs with this ID
For $sServerId In $aAppServerIds
If $sServerId == $id Then ContinueLoop

debug("checking if we are currently on server " & $sServerId)

$newCookies = StringReplace($newCookies, $sServerId, $id, 0, 0)
If @extended Then
debug("replaced old server id " & $sServerId & " to new server id " & $id)
debug("new cookies string: " & $newCookies)
EndIf
Next

;ensure that we are now on the server of interest
If Not StringInStr($newCookies, $id) Then
alert("LoginChecker failed to navigate to server with id " & $id & ". Please fix the script!")
Exit
EndIf

debug("overwriting document.cookie")
$oDoc.cookie = $newCookies
debug("new document.cookie: " & $oDoc.cookie)

Exit

;verify HTTP body

EndFunc

The following output is returned:

checking app server for id ffffffffaf1c7718

current cookie string: usernameType=student; COOKIE_CONSENT_ACCEPTED=true; NSC_100732.qspe1_wjq1c.hspvq=ffffffffaf1c771d45525d5f4f58455e445a4a42378b; JSESSIONID=5EB0C22CD06E6D904653F663670B3056.root; session_id=EF0ABD73D15B5E4431CD59107946E9A9; s_session_id=0D26A888B87A5CF9D07020CF5B5A5955

checking if we are currently on server ffffffffaf1c771b

checking if we are currently on server ffffffffaf1c771a

checking if we are currently on server ffffffffaf1c771d

replaced old server id ffffffffaf1c771d to new server id ffffffffaf1c7718

new cookies string: usernameType=student; COOKIE_CONSENT_ACCEPTED=true; NSC_100732.qspe1_wjq1c.hspvq=ffffffffaf1c771845525d5f4f58455e445a4a42378b; JSESSIONID=5EB0C22CD06E6D904653F663670B3056.root; session_id=EF0ABD73D15B5E4431CD59107946E9A9; s_session_id=0D26A888B87A5CF9D07020CF5B5A5955

checking if we are currently on server ffffffffaf1c776c

overwriting document.cookie

new document.cookie: usernameType=student; COOKIE_CONSENT_ACCEPTED=true; NSC_100732.qspe1_wjq1c.hspvq=ffffffffaf1c771d45525d5f4f58455e445a4a42378b; JSESSIONID=5EB0C22CD06E6D904653F663670B3056.root; session_id=EF0ABD73D15B5E4431CD59107946E9A9; s_session_id=0D26A888B87A5CF9D07020CF5B5A5955

This means that:

  • the cookie is retrieved correctly

  • the ID of interest is replaced correctly, and set to $newCookies

  • when executing $oDoc.cookie = $newCookies, $oDoc.cookie does not actually change
Why does it appear impossible to set $oDoc.cookie? Edited by tom13
Link to comment
Share on other sites

When you set cookie as stated on this page, they use escape to encode the string. Maybe that would help?

And a UDF:

Thanks, I was hoping this would be it. Unfortunately encoding the string before setting $oDoc.cookie appears to have no effect at all. Same story when I also decode the cookie before retrieving it.

Any other ideas? :(

Link to comment
Share on other sites

Also, check this out:

Dale

Free Internet Tools: DebugBar, AutoIt IE Builder, HTTP UDF, MODIV2, IE Developer Toolbar, IEDocMon, Fiddler, HTML Validator, WGet, curl

MSDN docs: InternetExplorer Object, Document Object, Overviews and Tutorials, DHTML Objects, DHTML Events, WinHttpRequest, XmlHttpRequest, Cross-Frame Scripting, Office object model

Automate input type=file (Related)

Alternative to _IECreateEmbedded? better: _IECreatePseudoEmbedded  Better Better?

IE.au3 issues with Vista - Workarounds

SciTe Debug mode - it's magic: #AutoIt3Wrapper_run_debug_mode=Y

Doesn't work needs to be ripped out of the troubleshooting lexicon. It means that what you tried did not produce the results you expected. It begs the questions 1) what did you try?, 2) what did you expect? and 3) what happened instead?

Reproducer: a small (the smallest?) piece of stand-alone code that demonstrates your trouble

Link to comment
Share on other sites

Hmm, that is somewhat confusing. Do you have any idea how I would now replace the entire cookie?

I think it's pretty clear - pair by pair.

Dale

Free Internet Tools: DebugBar, AutoIt IE Builder, HTTP UDF, MODIV2, IE Developer Toolbar, IEDocMon, Fiddler, HTML Validator, WGet, curl

MSDN docs: InternetExplorer Object, Document Object, Overviews and Tutorials, DHTML Objects, DHTML Events, WinHttpRequest, XmlHttpRequest, Cross-Frame Scripting, Office object model

Automate input type=file (Related)

Alternative to _IECreateEmbedded? better: _IECreatePseudoEmbedded  Better Better?

IE.au3 issues with Vista - Workarounds

SciTe Debug mode - it's magic: #AutoIt3Wrapper_run_debug_mode=Y

Doesn't work needs to be ripped out of the troubleshooting lexicon. It means that what you tried did not produce the results you expected. It begs the questions 1) what did you try?, 2) what did you expect? and 3) what happened instead?

Reproducer: a small (the smallest?) piece of stand-alone code that demonstrates your trouble

Link to comment
Share on other sites

I think it's pretty clear - pair by pair.

Dale

That doesn't seem to work, for some reason it adds the cookie and duplicates it instead of replacing it.

My code:

$oDoc.cookie = $sName & "=" & $sVal

Resulting cookie string:

NSC_100732.qspe1_wjq1c.hspvq=ffffffffaf1c771845525d5f4f58455e445a4a42378b; JSESSIONID=037CE036F417243612A9766EC519EDF5.root; NSC_100732.qspe1_wjq1c.hspvq=ffffffffaf1c771b45525d5f4f58455e445a4a42378b; JSESSIONID=0EC325282EF8D5E4811AA444E64AA2FF.root

Obviously, only the first "NSC_100732.qspe1_wjq1c.hspvq" cookie should be there, not the second (this is the old one).

Edited by tom13
Link to comment
Share on other sites

Figure out what you are doing differently from this example:

#include <IE.au3>

$oIE = _IECreate("www.google.com")

$oIE.document.cookie = "test_cookie=one; path=/;"
ConsoleWrite($oIE.document.cookie & @CRLF)

$oIE.document.cookie = "test_cookie=two; path=/;"
ConsoleWrite($oIE.document.cookie & @CRLF)

_IEQuit($oIE)

Dale

Edited by DaleHohm

Free Internet Tools: DebugBar, AutoIt IE Builder, HTTP UDF, MODIV2, IE Developer Toolbar, IEDocMon, Fiddler, HTML Validator, WGet, curl

MSDN docs: InternetExplorer Object, Document Object, Overviews and Tutorials, DHTML Objects, DHTML Events, WinHttpRequest, XmlHttpRequest, Cross-Frame Scripting, Office object model

Automate input type=file (Related)

Alternative to _IECreateEmbedded? better: _IECreatePseudoEmbedded  Better Better?

IE.au3 issues with Vista - Workarounds

SciTe Debug mode - it's magic: #AutoIt3Wrapper_run_debug_mode=Y

Doesn't work needs to be ripped out of the troubleshooting lexicon. It means that what you tried did not produce the results you expected. It begs the questions 1) what did you try?, 2) what did you expect? and 3) what happened instead?

Reproducer: a small (the smallest?) piece of stand-alone code that demonstrates your trouble

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...