Announcement

Collapse

Forum Guidelines

This forum is for finished source code that is working properly. If you have questions about this or any other source code, please post it in one of the Discussion Forums, not here.
See more
See less

HTTP, responding to a webpage that uses session variables/cookies

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • HTTP, responding to a webpage that uses session variables/cookies

    A bare-bones demo of a simple website that uses cookies, and a simple PowerBasic program that reads and uses the cookie.

    The website consists of two PHP pages ... index.php which simply generates a random 3-digit code, and verify.php which it sends the users input to.

    For this demo simply create a directory called "session" in the root of your webserver, and create these two PHP files there ...

    INDEX.PHP
    Code:
    <?php
    
    function GenRandCode() {
      for($i=0; $i<3; $i++) { $out.= rand(0,9); }
      return $out;
    }
    
    $submit = $_POST["submit"];
     
    if(!$submit) {
      session_start();
      $rndcode = GenRandCode(); // generate 4-digit code
      $_SESSION["rndcode"] = $rndcode; // write code to session
      session_write_close();
    }
    
    ?>
    
    <html><body>
    
    <form action='verify.php' method='post'>
    Random Code:  <? echo $rndcode . "<br><br>"; ?>
    Enter code: <input type='text' name='rndcode' maxlength='4'>
    <input type='submit' name='submit' value='Submit'>
    </form>
    
    </body></html>
    VERIFY.PHP
    Code:
    <?php
    
    // Request form data
    $rndcode = $_POST["rndcode"];
    $submit       = $_POST["submit"];
    
    if($submit) {
      session_start();
      if(!isset($_SESSION["rndcode"])) {
        die("Error: Illegal form access");
      }
    }
    
    ?>
    <html><body>
    
    <?php
    
    if(!$submit) {
      echo "Nothing submitted";
    } else {
      if($rndcode != $_SESSION["rndcode"]) {
        echo "The code is WRONG!\n";
      } else {
        echo "The code is CORRECT!\n";		
      }
    }
    ?>
    
    </body></html>

    --------------------------------------------------------


    Now here is a simple Powerbasic program which reads INDEX.PHP to extract its random code (as well as the Cookie from the header), and then submits the random code as well as the Cookie to VERIFY.PHP

    Code:
    #COMPILE EXE
    
    FUNCTION PBMAIN() AS LONG
        LOCAL hPort AS DWORD, sURLHost AS STRING, sPage1 AS STRING, sPage2 AS STRING
        LOCAL i AS DWORD, i2 AS DWORD, sRndCode AS STRING, sCookie AS STRING
        LOCAL sPacket AS STRING, sBuf AS STRING, sReply AS STRING
    
    '// URL Settings --------------------------------------------------------------------------------
        sURLHost = "127.0.0.1"            '// Webserver host
        sPage1   = "/session/index.php"   '// URL path of first page
        sPage2   = "/session/verify.php"  '// URL path of verification page
    
    '// Download sPage1 (index.php) to sBuf ---------------------------------------------------------
        hPort = FREEFILE
        TCP OPEN PORT 80 AT sURLHost AS #hPort TIMEOUT 10000
          sPacket = "GET " & sPage1 & " HTTP/1.1" & $CRLF & _
                    "Accept: text/*, text/html, */*" & $CRLF & _
                    "Accept-Encoding:" & $CRLF & _
                    "Cache-Control: no-cache" & $CRLF & _
                    "Host: " & sURLHost & $CRLF & $CRLF
          TCP PRINT #hPort, sPacket
          DO
            TCP RECV #hPort, 4096, sPacket
            sBuf = sBuf & sPacket
            'STDOUT sPacket
          LOOP WHILE LEN(sPacket)
        TCP CLOSE #hPort
    
    '// Extract the embedded sessionid cookie to sCookie --------------------------------------------
        i = INSTR(1, sBuf, "Cookie:")
        IF i = 0 THEN
            STDOUT "Error: Cookie not found": WAITKEY$: EXIT FUNCTION
        END IF
        i = i + 7
        i2 = INSTR(i, sBuf, ";")
        sCookie = TRIM$(MID$(sBuf, i, i2 - i ))
        STDOUT "Cookie = " & sCookie
    
    '// Extract the embedded random code to sRndCode ------------------------------------------------
        i = INSTR(1, sBuf, "Random Code:")
        IF i = 0 THEN
            STDOUT "Error: Random code not found": WAITKEY$: EXIT FUNCTION
        END IF
        i = i + 12: i2 = INSTR(i, sBuf, "<")
        sRndCode = TRIM$(MID$(sBuf, i, i2-i))
        STDOUT "Random code = " & sRndCode
    
    '// Submit the random code to sPage2 (verify.php) -----------------------------------------------
        STDOUT "Result ..."
        sReply = "rndcode=" & sRndCode & "&submit=submit"
        hPort = FREEFILE
        TCP OPEN PORT 80 AT sURLHost AS #hPort TIMEOUT 10000
          sPacket = "POST " & sPage2 & " HTTP/1.1" & $CRLF & _
                    "Host: " & sURLHost & $CRLF & _
                    "User-Agent: Mozilla/5.0" & $CRLF & _
                    "Accept: text/*, text/html, */*" & $CRLF & _
                    "Accept-Encoding: " & $CRLF & _
                    "Referer: http://" & sURLHost & sPage1 & $CRLF & _
                    "Cookie: " & sCookie & $CRLF & _
                    "Content-Type: application/x-www-form-urlencoded" & $CRLF & _
                    "Content-Length: " & TRIM$(STR$(LEN(sReply))) & $CRLF & _
                    $CRLF & _ '// End of header
                    sReply
          TCP SEND #hPort, sPacket
          DO
            TCP RECV #hPort, 4096, sPacket
            STDOUT sPacket
          LOOP WHILE LEN(sPacket)
        CLOSE #hPort
    
    STDOUT $CRLF & "Finished, press any key to continue . . .";
    WAITKEY$
    END FUNCTION
    ps. For a small, lightweight personal webserver for Windows (ideal for testing/debugging PB web-related apps) I use BadBlue (www.badblue.com), it's free to use.
    -
Working...
X