Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    Captive portal manual logout page address

    Scheduled Pinned Locked Moved Captive Portal
    105 Posts 15 Posters 57.6k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • E
      EMWEE
      last edited by

      So the Captive Portal Assistant (pseudo browser) shares the cookies with your other browers?

      1 Reply Last reply Reply Quote 0
      • GertjanG
        Gertjan
        last edited by

        @EMWEE:

        So the Captive Portal Assistant (pseudo browser) shares the cookies with your other browers?

        Noop. Guess not. See my last message …. I edited.

        No "help me" PM's please. Use the forum, the community will thank you.
        Edit : and where are the logs ??

        1 Reply Last reply Reply Quote 0
        • E
          EMWEE
          last edited by

          Right, think im gonna switch to the less secure IP/MAC option.

          1 Reply Last reply Reply Quote 0
          • D
            doktornotor Banned
            last edited by

            @EMWEE:

            So the Captive Portal Assistant (pseudo browser) shares the cookies with your other browers?

            No. It's like a crippled "anonymous" browser, no cookies saved, no javascript either AFAICT. The Apple support forums are full of complaints about this nonsense (additionally, it gets gradually worse with every new OS release.

            1 Reply Last reply Reply Quote 0
            • E
              EMWEE
              last edited by

              GertJan do you have some new links on the pastbin files for your IP/MAC solution?

              My already_connected function works…but it seems it can resolv #PORTAL_SESSION#

              So I guess I need to add the  $htmltext = str_replace("#PORTAL_SESSION#", htmlspecialchars($sessionid), $htmltext);

              1 Reply Last reply Reply Quote 0
              • A
                amitaussie
                last edited by

                @EMWEE:

                @amitaussie:

                I am not using https CP.

                It works on http.

                Guide is on de previous page.
                https://forum.pfsense.org/index.php?topic=77143.msg478165#msg478165

                Hi EMWEE,

                Thanks for your reply.

                I am trying to work this solution on LAN interface, but authentication page is not showing, may be I have settings in Firefox " Do no remember history" I ll change this to normal setting and ll try if it works then…

                Regards

                amitaussie

                1 Reply Last reply Reply Quote 0
                • E
                  EMWEE
                  last edited by

                  Does your captive portal works without the modifications?

                  U should get your AUTHENTICATION page by default. So if that doesnt work your captive portal doesnt work out of the box…or u made a mistake in index.php...what would result in a error in your browser.

                  Maby post your complete index.php and captiveportal.inc on pastebin and share in it this topic.

                  1 Reply Last reply Reply Quote 0
                  • A
                    amitaussie
                    last edited by

                    Hi EMWEE!

                    Client is not able to connect to internet if CP is active on LAN interface in pfSense and url on client shows this:

                    http://192.168.100.1:8002/index.php?zone=cpzone1&redirurl=http%3A%2F%2F%2Fhttp%3A%2F%2F%2Fhttp%3A%2F%2F%2Fhttp%3A%2F%2F%2Fhttp%3A%2F%2F%2Fhttp%3A%2F%2F%2Fhttp%3A%2F%2F%2Fhttp%3A%2F%2F%2Fhttp%3A%2F%2F%2Fhttp%3A%2F%2F%2Fhttp%3A%2F%2F%2Fhttp%3A%2F%2F%2Fhttp%3A%2F%2F%2Fhttp%3A%2F%2F%2Fhttp%3A%2F%2F%2Fhttp%3A%2F%2F%2Fhttp%3A%2F%2F%2Fhttp%3A%2F%2F%2Fhttp%3A%2F%2F%2Fhttp%3A

                    and gives this message in page - The page isn't redirecting properly

                    If I do not make changes in pfSense, CP page is showing for authentication on LAN and pop up for log out is working ok.

                    below are the files…

                    /etc/inc/captiveportal.inc- http://pastebin.com/BUstXyr1

                    /usr/local/captiveportal/index.php- http://pastebin.com/ffj69qAb

                    Index.php file is copied from Gertjan's pastebin

                    File: /usr/local/captiveportal/index.php : http://pastebin.com/scYuKTyw - index.php

                    Thanks and Regards

                    amitaussie

                    1 Reply Last reply Reply Quote 0
                    • E
                      EMWEE
                      last edited by

                      Do you have a html file with the name "zone"-already-connected.html? (ex. Wifi-already-connected.html)

                      If your users have a cookie they are redirected to that page.

                      1 Reply Last reply Reply Quote 0
                      • A
                        amitaussie
                        last edited by

                        Hi EMWEE!

                        Yes I have uploaded that file in CP using File Manager. File I uploaded is copied from Gertjan's pastebin

                        I am using default setting of browsers i.e. firefox. Browser is configure to remember history and accept cookies.

                        I do not understand how to users have cookie

                        If your users have a cookie they are redirected to that page.

                        Thanks & Regards

                        amitaussie

                        1 Reply Last reply Reply Quote 0
                        • GertjanG
                          Gertjan
                          last edited by

                          He (amitaussie) PM'ed me with this:
                          CP Tab: file Manager status:

                                      captiveportal-cpzone1-already-connected.html    984 bytes    delete
                                      captiveportal-style.css                           2 KB       delete
                                               TOTAL                                    3 KB
                          

                          seems good to me.

                          I'm put in place his 
                          /etc/inc/captiveportal.inc- http://pastebin.com/BUstXyr1
                          /usr/local/captiveportal/index.php- http://pastebin.com/ffj69qAb

                          on my pfsense - and report back.

                          edit.
                          Ok, found something - your /usr/local/captiveportal/index.php is nearly ok.
                          This : http://pastebin.com/ffj69qAb when I upload it to my server, produces a file coded in "UNIX - UTF 8 w/o BOM".
                          Should be "UNIX ANSI."

                          Your http://pastebin.com/ffj69qAb does not popup the portal page for me.
                          I rebuild http://pastebin.com/scYuKTyw - /usr/local/captiveportal/index.php - entire file - version 2015-02-06 : I took an original "index.php from https://github.com/pfsense/pfsense/blob/RELENG_2_2/usr/local/captiveportal/index.php [ PfSense 2.2 Release ] - added my 2 mods - tested on my pfSense and stored on pastbin.org :: http://pastebin.com/scYuKTyw ]

                          Btw: I found out that when coping back the files from pastebin.org to my text editor it converted ther char encoding "UNIX UTF w/o BOM" (there are some nasty non-pure ASCI chars in the file).
                          Saving the file (example: index.php) in this format will 'explode' the pfSense web server.
                          ALWAYS check you code page : often this info is visible at the bottom of your text editor (Notepad++, or far better : UltraEdit)

                          No "help me" PM's please. Use the forum, the community will thank you.
                          Edit : and where are the logs ??

                          1 Reply Last reply Reply Quote 0
                          • A
                            amitaussie
                            last edited by

                            Hi Gertjan!

                            Thank you very much for your effort.

                            I ll check it tomorrow and revert back.

                            Thanks & Regards

                            amitaussie

                            1 Reply Last reply Reply Quote 0
                            • E
                              EMWEE
                              last edited by

                              So today i had some free time on the box to test the IP/MAC solution and i cant get it to work. When i revisit the portal page i do get the "already_connected.html" page. But when i press my logout button nothing happends. They only diffrent i can spot is that it doesnt show my #PORTAL_SESSION# string. So i guess thats why i cant logout.

                              Here is my code:

                              #function already_connected($clientip, $clientmac) {
                              global $cpzone;
                              
                              if (($clientip != "") && ($clientmac != "")) {
                              $query = "WHERE ip = '{$clientip}' AND mac = '{$clientmac}'";
                              $cpdb = captiveportal_read_db($query);
                              /* Lookup the $sessionid */
                              foreach ($cpdb as $cpentry) {
                              	if (($cpentry[2] == $clientip) && ($cpentry[3] == $clientmac))
                              return $cpentry[5];
                              	}
                               return false;
                              	} else
                              return false;
                              }
                              

                              So this part works…since i get redirected to the already_connected page.

                              function portal_reply_page($redirurl, $type = null, $message = null, $clientmac = null, $clientip = null, $username = null, $password = null) {
                                      global $g, $config, $cpzone;
                              
                                      /* Get captive portal layout */
                                      if ($type == "redir") {
                                              header("Location: {$redirurl}");
                                              return;
                                      } else if ($type == "login")
                                              $htmltext = get_include_contents("{$g['varetc_path']}/captiveportal_{$cpzone}.html");
                                      else if ($type == "already_connected")
                                      {
                                            #  $sessionid = $_COOKIE['cookie_portal'];
                                              $htmltext = get_include_contents("{$g['captiveportal_path']}/captiveportal-{$cpzone}-already-connected.html");
                              $htmltext = str_replace("\$PORTAL_SESSION\$", htmlspecialchars($sessionid), $htmltext);
                               $htmltext = str_replace("#PORTAL_SESSION#", htmlspecialchars($sessionid), $htmltext);
                              

                              I guess here is something wrong with the str_replace…but i cant figure it out.

                              I have this on bottom of index.php

                              else if (already_connected($clientip, $clientmac)) {
                              	/* display already connected page */
                              	portal_reply_page($redirurl, "already_connected",null,$clientmac,$clientip);
                              

                              This looks fine by me since i do get redirected.

                              And finally, the main part of my zone-already-connected.html:

                              
                              <form method="post"  ="" action="#PORTAL_ACTION#">
                              								<a>IP:</a> <a_curs>#CLIENT_IP#</a_curs>
                              
                                                              <a>MAC:</a> <a_curs>#CLIENT_MAC#</a_curs>
                              
                                                              <a>Session:</a> <a_curs>#PORTAL_SESSION#</a_curs>
                              
                                                                </form>
                              
                              

                              So i dont see any session ID after Session. When i use cookies this works fine. Does this have anything do to with RADIUS (im using RADIUS).

                              Or am i missing some part where i need to set sessionid as cpentry[5] in the portal_reply_function?

                              Something like this:

                                      else if ($type == "already_connected")
                              	$sessionid = $cpentry[5];
                                              $htmltext = get_include_contents("{$g['captiveportal_path']}/captiveportal-{$cpzone}-already-connected.html");
                              	$htmltext = str_replace("\$PORTAL_SESSION\$", htmlspecialchars($sessionid), $htmltext);
                                  $htmltext = str_replace("#PORTAL_SESSION#", htmlspecialchars($sessionid), $htmltext);
                              
                              1 Reply Last reply Reply Quote 0
                              • GertjanG
                                Gertjan
                                last edited by

                                Ok, I understand why you return " $cpentry[5];" in stead of "true":

                                function already_connected($clientip, $clientmac) {
                                	global $cpzone;
                                
                                	if (($clientip != "") && ($clientmac != "")) {
                                		$query = "WHERE ip = '{$clientip}' AND mac = '{$clientmac}'";
                                		$cpdb = captiveportal_read_db($query);
                                		foreach ($cpdb as $cpentry) {
                                		if (($cpentry[2] == $clientip) && ($cpentry[3] == $clientmac))
                                			return $cpentry[5];
                                		}
                                	}
                                	return false;
                                }
                                

                                But, here:

                                ....
                                        else if ($type == "already_connected")
                                	$sessionid = $cpentry[5];
                                ...
                                
                                

                                Danger : (in function portal_reply_page) : "$cpentry[5]" is unknown there, so it is an empty string == "" == nothing.

                                Just look it up, by now you know for sure it exists:

                                .....
                                        else if ($type == "already_connected")
                                        $sessionid = already_connected($clientip, $clientmac);
                                .....
                                
                                

                                After  that, you don't have to do this:

                                ....
                                $htmltext = str_replace("\$PORTAL_SESSION\$", htmlspecialchars($sessionid), $htmltext);
                                 $htmltext = str_replace("#PORTAL_SESSION#", htmlspecialchars($sessionid), $htmltext);
                                ....
                                

                                Because its done a couple of line farther along already.

                                Check out http://pastebin.com/piamkhNB - line 35 and 45  :D

                                No "help me" PM's please. Use the forum, the community will thank you.
                                Edit : and where are the logs ??

                                1 Reply Last reply Reply Quote 0
                                • E
                                  EMWEE
                                  last edited by

                                  Thanks again for ur fast reply GertJan  :D.

                                  No wonder that i didnt see a sessionsid when the string was empty. I didnt know it would be unknown at that function.

                                  So ur solution would fix that problem. Thanks again!

                                  1 Reply Last reply Reply Quote 0
                                  • A
                                    amitaussie
                                    last edited by

                                    Hi Gertjan!

                                    I have made changes to both files /etc/inc/captiveportal.inc and /usr/local/captiveportal/index.php and these are in UNIX /ANSI encapsulation now. I am using index.php file from your pastebin.

                                    After using these files now I am able to get CP login page but when I enter login name and password, browser is redirected to an error page and not able to access internet:
                                    "Fatal error: Call to undefined function sqlite_escape_string() in /etc/inc/captiveportal.inc on line 2057 "

                                    If I manually disable this line 2057 in captiveportal.inc then browser is redirected to "log out page" but again I am not able to browse internet and if I open  any new page/tab, browser is redirected to this "log out page" but anycase internet is not accessible. If I click logout button, available on the "log out page", then I am redirected to a page:
                                    "You have been disconnected. Failed setsockoptFailed setsockopt"

                                    In this post at page no-1 you have mentioned 3 changes in captiveportal.inc file but at no-3, about a change in a function in captiveportal.inc file I am confused:

                                    1. Replace the entire function portal_allow(…) with this one : http://pastebin.com/jDHVaNwf (actually, I just added nearly at the bottom one line:
                                      setcookie("cookie_portal", $sessionid);

                                    I copied this whole function from your pastebin and applied in my file but I am not able to find the change you mentioned:- setcookie("cookie_portal", $sessionid);

                                    I think my captiveportal.inc file is not ok, so I am getting these errors, can you please upload your entire captivelportal.inc file so that I can use that file and see if it works for me or any other idea?

                                    Thanks & Regards

                                    amitaussie

                                    1 Reply Last reply Reply Quote 0
                                    • E
                                      EMWEE
                                      last edited by

                                      if ($writecfg == true)
                                                          write_config();
                                      
                                                  $timeout = 0;
                                                  if (!empty($config['captiveportal'][$cpzone]['timeout']) && is_numeric($config['captiveportal'][$cpzone]['timeout'])) {
                                                          $timeout = time() + $config['captiveportal'][$cpzone]['timeout'] * 60;
                                                          setcookie("cookie_portal", $sessionid, $timeout);
                                                  } else
                                                          setcookie("cookie_portal", $sessionid, $timeout);   
                                      ```Line 2086 in http://pastebin.com/BUstXyr1\. Thats where the cookie is set. The other 2 changes are the functions: already_connected and portal_reply_page
                                      
                                      What i didnt find in this topic is what version of pfSense are you using? I tried GertJan's code for 2.1.5 at first and when i got that working i tried to copy it to a 2.2 box…it didnt worked. I just replaced the function by hand in the original captiveportal.inc and index.php files instead of replacing the whole file. Maby you can try that.
                                      
                                      Post your captiveportal.inc again to see whats wrong.
                                      1 Reply Last reply Reply Quote 0
                                      • A
                                        amitaussie
                                        last edited by

                                        Hi Gertjan & EMWEE!

                                        At last I got it working…..

                                        Problem was the 3rd change in captiveportal.inc file.

                                        1. Replace the entire function portal_allow(…) with this one : http://pastebin.com/jDHVaNwf (actually, I just added nearly at the bottom one line:

                                        setcookie("cookie_portal", $sessionid);

                                        If I copy entire mentioned 3rd function from Gertjan's http://pastebin.com/jDHVaNwf then it is giving that error
                                        "Fatal error: Call to undefined function sqlite_escape_string() in /etc/inc/captiveportal.inc"
                                        I copied first 2 functions entirely from Gertjan's pastebin but in last 3rd function I added a line as suggested by gertjan "setcookie("cookie_portal", $sessionid);" in function portal_allow(…) after line...(as told by Gertjan earlier. so do not copy 3rd function entirely from pastebin)

                                        if ($writecfg == true)
                                        write_config();
                                        setcookie("cookie_portal", $sessionid);

                                        CP page is showing and "log out page" some times appears and some time not but I can recall "log out page" by entering address "192.168.100.1:8002" in url anytime and it also gets disconnected if hit logout button so its working.
                                        Only 1 problem is left "log out page" gets redirected after entering user name and password so it does not appear always as it should. I have also updated my pastebin files.
                                        /etc/inc/captiveportal.inc- http://pastebin.com/BUstXyr1
                                        /usr/local/captiveportal/index.php- http://pastebin.com/ffj69qAb

                                        But at last great work and great support…..

                                        Thanks & Regards

                                        amitaussie

                                        1 Reply Last reply Reply Quote 0
                                        • E
                                          EMWEE
                                          last edited by

                                          
                                                  $timeout = 0;
                                                  if (!empty($config['captiveportal'][$cpzone]['timeout']) && is_numeric($config['captiveportal'][$cpzone]['timeout'])) {
                                                          $timeout = time() + $config['captiveportal'][$cpzone]['timeout'] * 60;
                                                          setcookie("cookie_portal", $sessionid, $timeout);
                                                  } else
                                                          setcookie("cookie_portal", $sessionid, $timeout); 
                                          

                                          Dont know if this works…i only have

                                          setcookie("cookie_portal", $sessionid)
                                          

                                          "log out page" some times appears and some time not

                                          It should give you a logout page when u revisit 192.168.100.1:8002 and when u have a cookie.

                                          So no cookie = no logout.

                                          But I can recall "log out page" by entering address "192.168.100.1:8002" in url anytime and it also gets disconnected if hit logout button so its working.

                                          This is the opposit of what you stated above….

                                          Only 1 problem is left "log out page" gets redirected after entering user name and password so it does not appear always as it should.

                                          So your logout page shows up right after u logged in?

                                          1 Reply Last reply Reply Quote 0
                                          • A
                                            amitaussie
                                            last edited by

                                            "log out page" some times appears and some time not

                                            By this I want to say that after log in via CP, log out page does not appear as it should, rather I am redirected to intended site. Like if I start to use internet and want to browse google, CP page comes in, I log in , now log out page should appear but it does not, I am redirected to google site and when I need to log out I has to recall log out page. but sometimes I dont get redirected to intended site instead log out page remains.
                                            cookies are enabled in my browser by default. but log out page should come if cookies are disabled too. is int it?

                                            Thanks & Regards
                                            amitaussie

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.