RE: Is it possible to change the browser's address/location URL without Redirect?

2002-08-09 Thread French, Shawn

One option:

If there's an erro in form 2,
Save the user's form data in some session variables
Then use a mailto:[EMAIL PROTECTED]]
> Sent: August 9, 2002 2:26 PM
> To: [EMAIL PROTECTED]
> Subject: Is it possible to change the browser's address/location URL
> without Redirect?
> 
> 
> Looks like my explanation is too long or too bad.
> The simple idea is in page step 1, after the
> 
> ...
> 
> submitted, I want the browser show something
> http://www.example.com/step/1/error, instead of
> http://www.example.com/step/2,
> if there is a need for user to correct the data submitted.
> 
> It might be accomplished by using one of the approaches 
> outlined below, but
> I was wondering if there's other way that can save the overhead of the
> write/read or resend the data, and the re-process. Probably 
> not much we can
> do if the URL displayed in the browser's address/location bar 
> depends only
> on the action value of the form submitted, not based on the 
> server response?
> 
> Harry
> 
> 
> 
> - Original Message -
> From: "Harry Zhu" <[EMAIL PROTECTED]>
> To: "mod_perl list" <[EMAIL PROTECTED]>
> Sent: Thursday, August 08, 2002 4:22 PM
> Subject: Can I change the browser's address/location?
> 
> 
> > Suppose I have a generic content handler to handle requst
> > /step/1, /step/2, ..., /step/n
> >
> > 
> >   SetHandler perl-script
> >   PerlHandler MyHandler
> >
> > 
> >
> > #MyHandler.pm
> > package MyHandler;
> > sub handler {
> >   my $r=shift;
> >   my $step = substr($r->path_info(),1);
> >
> >   #do something before fetch the content
> >
> >   #fetch content: usually include a form that will assign action
> > /step/($step+1)
> >
> > }
> >
> > So if everything goes well, the user will follow through 
> from step 1, step
> > 2, until fnish.
> > Now if in the "#do something ..." part, something is wrong, it will
> usually
> > require user go back to the same step, for example, to fill the form
> again.
> > The way my old cgi script does is just generate the form 
> with prefilled
> > value plus some error message indicate what's wrong. It 
> works ok but the
> > browser location will show /step/($step+1) while it actually is
> /step/$step.
> > Now that I am working it on mod-perl I thought I should be 
> able to do
> > something about it. I briefly browsed the 2 mod-perl books (eagle,
> > cookbook), and could not found a simple solution yet  (or I 
> missed it?). I
> > was think using one of the folowing might work:z
> > 1) save the request data in a temp file and redirect or 
> http-refresh to
> > /step/$step?$session_id or /step/$step/error?$session_id
> > Remember the content is dynamic and depend on the input 
> form data, so
> simple
> > redirect may not work.
> > Looks like Apache will not post the form data when redirect 
> with Location?
> >
> > 2) print a short form with hidden data and assign 
> action=/step/$step/error
> > then submit right away (onload=form.submit()?)
> >
> > Does anybody have a simple solution, e.g. without redirect? 
> Is it possible
> > to change the URI showing in the browser's address/location bar?
> >
> > I would appreciated if somebody can pointer me to the right 
> direction.
> >
> > Harry
> >
> >
> 
> 



Problem: Apache2 / Perl 5.8.0 / mod_perl 2.0 / PHP all on Win32

2002-07-25 Thread French, Shawn

I am in a bit of a jam. I think the "cross-post" is necessary since I need
the help of Apache, mod_perl, and PHP developers/users. I apologize for the
length, if you have time, my explanation (at the end) should clarify what I
mean.

Summary
---
I need:
- A perl-enabled web server to run on the win32 platform
- mod_perl to allow for persistent (stay connected on the server side)
Net::Telnet objects  (CGI is unacceptable since a new process is spawned at
each request leaving no room for persistent objects)
- Multiple perl interpreters of Apache2 / mod_perl 2.0 to serve more than
one mod_perl request at a time
- Access to the client's Net::Telnet object during all of his/her requests
throughout his/her session
- I might need Perl 5.8.0 for threads::shared to solve the above
problem
- A way for mod_perl scripts to communicate with PHP scripts quickly and
efficiently

Does anybody know what kind of configuration I could use to support all of
my needs above? 
Does anybody know another way for mod_perl 2.0 and PHP to communicate other
than apache_notes (if it's true I can't use apache_notes with Apache2 / PHP
4.2.X)?
If a solution is not available now (ie. I can't share Net::Telnet objects in
different requests, or, PHP isn't fully supporting Apache2), when will it be
available (if ever)?

Thanks for your time and any help,
Shawn


Brief (?) Explanation
-
I need a win32 server to provide a sort of web-interface to perl Net::Telnet
objects (which is just a wrapper for telnet sessions written in perl). These
objects open sockets/file_handles on the server and have to be accessible to
my server-side scripts throughout multiple client requests.

ie. A session for Client_123 might look like:
Request 1: Client_123's telnet object is initialized (connects to a
remote telnet host)
Request 2 -> n-1: A script on the server executes commands on
Client_123's telnet connection
Request n: Client_123's telnet object is destroyed

>From mod_perl 2.0 docs
(http://perl.apache.org/docs/2.0/os/win32/install.html):
A mod_perl 1.0 enabled server based on Apache 1.3 on Win32 is limited to a
single thread serving a request at a time. This effectively prevents
concurrent processing, which can have serious implications for busy sites.
This problem is addressed in the multi-thread/multi-process approach of
mod_perl 2.0/Apache 2.0

Obviously I need Apache2/mod_perl2 if I want to be able to have more than
one client request executing perl code at the same time. However, I need to
make sure that the Net::Telnet object is accessible (ie. in shared memory,
indexed by the clients session_id) for all of Client_123's request. I was
told that I might be able to use threads::shared to keep the Net::Telnet
objects accessible by multiple mod_perl threads in mod_perl2 and Perl 5.8.0
so that shouldn't be a problem... as long as I use Apache2 / mod_perl 2.0 /
Perl 5.8.0.

Thrown in to the mix is the fact that I need some PHP scripts to communicate
(transfer parameters) to mod_perl scripts, and for the mod_perl to transfer
the results back to the PHP scripts. I have this working using apache notes
in Apache1.3.26 / mod_perl 1.27 / PHP 4.21. However (as mentioned above)
only one mod_perl request (involving telnet stuff) can be served at a time
so I need to upgrade to Apache2, where there isn't apache_note support
(http://bugs.php.net/bug.php?id=17557).





RE: Persistent Net::Telnet Objects in Apache2/mod_perl2

2002-07-15 Thread French, Shawn


Stas Bekman wrote:
> It seems that you are after the same functionality as Apache::DBI, you 
> want a pool of items that you want to be able to choose from. 
> Look for threads::shared (perl 5.8.0), just create a shared hash with 
> keys that you use for the map and the values for the actual connection
objects.

YES!!! That is exactly what I need! Where do I find perl 5.8.0 and
threads::shared? I need a perl binary for windows since I'm without a
compiler...

As for the apache notes, I hope your right that it would be easy to
implement, otherwise I can't upgrade to apache2 without some _huge_
workarounds... which are always nice to avoid :)

Shawn



Persistent Net::Telnet Objects in Apache2/mod_perl2

2002-07-15 Thread French, Shawn

Hey everyone,

It's me again... the persistent telnet mod_perl newbie!
(http://msgs.securepoint.com/cgi-bin/get/apache0205/204.html)

I have implemented my project using persistent telnet connections (one for
each user session accessible throught the session to perform various
functions through telnet) on win2000:
Apache/1.3.26 (Win32) mod_perl/1.27_01-dev

Now for my next trick! 
When I started I didn't realize that mod_perl on win32 could only handle one
request at a time!!! This is obviously not acceptable for deployment.

So, I would like to upgrade to Apache2/mod_perl2 to take advantage of the
multi-process mod_perl model that the _very_ kind Randy Kobes told me about
(http://groups.google.ca/groups?dq=&hl=en&lr=&ie=UTF-8&oe=UTF-8&selm=afv3gu%
24qt2%242%40canopus.cc.umanitoba.ca). However, with a multi-process model,
I'm not sure how I will be able to keep a user's telnet-session-object
accessible throughout multiple requests. Currently it's not a problem since
there's only one process for ALL mod_perl requests. In Apache2/mod_perl2
there will be more than one process so I need some sort of mapping to make
sure my clients are aways served by the same process. Is this possible? Am I
in way over my head (again!!) ?

Another problem is that I have also been informed that my _MUCH_ used
apache_notes function in php will not be available to me in Apache2
(http://bugs.php.net/bug.php?id=17557). I realize this is an Apache2 thing,
but I was wondering if anyone here knows of a workaround that will allow my
php scripts to communicate with mod_perl (and vice-versa) until (hopefully)
the function is ported to Apache2.

Thanks in advance,

Shawn French
AcceLight Networks
613.266.4753
[EMAIL PROTECTED]





RE: Persistent Net::Telnet Objects

2002-05-30 Thread French, Shawn

I just found this: http://www.devshed.com/Talk/Books/ProApache/page2.html

"On Windows platforms, Apache does not fork; consequently, the directives
for controlling the number of processes or their lifetime have no effect.
Instead, Apache runs as a multi-threaded process"

Recall that I am using: Apache/1.3.20 (Win32) mod_perl/1.25_01-dev
mod_ssl/2.8.4 OpenSSL/0.9.6a on Windows 2000 with PHP 4.21

Would this be why my scripts are working? Does this mean that as long as I
stay with windows I will be alright?

I realize (as Medi Montaseri pointed out) that my scripts might not be too
secure (ie. hijacking a telnet session) however I am only concerned about
getting this working, and making sure it will remain working, as it will be
run behind a firewall in a corporate intranet.

For now I will continue coding with my current architecture hoping that the
above mentioned information is correct.

Thanks for all the help!
Shawn



RE: Persistent Net::Telnet Objects

2002-05-29 Thread French, Shawn

Perrin wrote:
> I can't see how it could be working now

That makes two of us!

> You're probably opening new telnet connections from each apache process.

I know that I am not since they are continuing to log to the same dump file,
and my code (as stated in previous message) simply goes to the hash and
takes the object.

> That won't work, since you can't control which process will handle 
> requests from the client.

OK, is there a way to make sure that there is just one process? This site is
not for milions of users, only 10 - 20.

I'm sure that others have had to keep persistent sockets and/or filehandles
on their server, and I really don't see how my problem is any different...

Please, can anybody help me?
Shawn



Persistent Net::Telnet Objects

2002-05-29 Thread French, Shawn

Vitals:
Apache/1.3.20 (Win32) mod_perl/1.25_01-dev mod_ssl/2.8.4 OpenSSL/0.9.6a on
Windows 2000 with PHP 4.21

I am working on a project that requires me to have two telnet objects per
user session opened, and accessible throughout the user's session. I have
looked at Apache::Session and many other solutions but my problem is that to
keep a Net::Telnet object, I need to keep open sockets and filehandles, so I
cannot serialize the object and store it in a database or file.

Currently I have similar code working flawlessly:
###
# "startup.pl" - called when apache starts (ie. PerlRequire
"d:/Apache/conf/startup.pl")
##
use MySite::Session;

###
# "Session.pm"
##
@EXPORT = qw( %sessionHash );
our %sessionHash;

###
# "init_session.pl" - called IN MOD_PERL when a new session is requested
##
use MySite::Session;
$sessionHash{$session_id . "_telnetObj"} = Net::Telnet->new();

###
# "dostuff.pl" - called IN MOD_PERL many time throughout the session
##
use MySite::Session;
my telnetObj = $sessionHash{$session_id . "_telnetObj"};
bless (\$telnetObj, "Net::Telnet");

Although this is working right now, I don't know enough [ anything? :) ]
about Apache or mod_perl to be sure that this will work in the future. What
I am really concerned about is that the telnetObj will only be accessible
from scripts run by the same child process as that which created and saved
it.

Is there a better way to do this?

Thanks,
Shawn French