[2 days left] What’s wrong with your cloud strategy? Learn why multicloud solutions matter with Nimble Storage.Register Now

x
?
Solved

cookie on php file

Posted on 2014-01-08
9
Medium Priority
?
504 Views
Last Modified: 2014-01-09
Dear Experts,
I set cookie of "ticker" by setcookie() in php that is really easy as follows code
But the strange thing is that why it will echo out the correct result
of cookie ticker to  be 'testing" after press refresh button on browser
I mean it won't echo out the result in first time run the php file after
I clear up all cookie on browser for testing. it always only echo out
the result after first run php file and run it again at second time(like refresh the page)
Is it related to php version isssue or apache linux server?  As remember it won't happen in the past and  it is as easy as shown  at
http://php.net/setcookie

Please advise
Duncan

<?php
setcookie("ticker",'testing');
echo $_COOKIE['ticker']."=====<br/>";
?>

Open in new window

0
Comment
Question by:duncanb7
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 4
9 Comments
 
LVL 111

Assisted Solution

by:Ray Paseur
Ray Paseur earned 2000 total points
ID: 39765513
Setcookie() does not modify the contents of $_COOKIE which was loaded at the time of the HTTP request.  You can modify $_COOKIE in your code, or you can use the cookie in the next HTTP request.  You can get a better understanding of the data flow if you read this article for understanding (don't just scan, it's not a simple process).
http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/A_11271-Understanding-Client-Server-Protocols-and-Web-Applications.html
0
 
LVL 13

Author Comment

by:duncanb7
ID: 39765525
So you mean what I experienced is normal and correct that I only echo out
the result of cookie at second time of http request, Right ?
0
 
LVL 13

Author Comment

by:duncanb7
ID: 39765585
I try to fix the issue by adding header to the same location of the  php file of cookie.php
but it will report to  warning
Warning: Cannot modify header information - headers already sent by (output started at /mysite/cookie.php:3) in /mysite/test.php on line 4

How to avoid the warning beside using @ on header() ? Why it will give me the warning
, what special reason behind for checking echo statement on header() function ?
it seems  the warning is not harmful or risky  to my code but I want to know the reason.

 I will read your good article definitely later on. But I need to finish my work first

Please advise & thanks

Duncan

cookie.php file
===============
<?php
setcookie("ticker",'testing');
echo $_COOKIE['ticker']."=====<br/>";
header("location: http://mysite.com/cookie.php");
?>

Open in new window

0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
LVL 111

Accepted Solution

by:
Ray Paseur earned 2000 total points
ID: 39765748
So you mean what I experienced is normal and correct that I only echo out
the result of cookie at second time of http request, Right ?
Right.  Please read the article and take note of the part about HTTP Headers Must Come First, Period.  You cannot use echo before header() unless you have turned on output buffering, with ob_start() or a configuration setting.
0
 
LVL 111

Expert Comment

by:Ray Paseur
ID: 39765765
One other note... The use of @ in a function call is a code smell, and is to be avoided.  It does not suppress the error, it only suppresses the error message; in other words, the error still happened and you just don't know about it.  This is one of the many stupid and dangerous things about the PHP language.  Such a capability should not even exist.  Just don't do that.
http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/A_12293-AntiPHPatterns-and-AntiPHPractices.html
0
 
LVL 13

Author Comment

by:duncanb7
ID: 39767158
my issue is fixed with the following code  by isset() and header() but it need
do two times HTTP request that may be slower in speed  felt by page viewer
Any idea is better than this code ?

Duncan

main.php
==============
<?php
setcookie("ticker",'testing');
if (isset($_COOKIE['ticker'])) { 
/* ticker cookie is set  so do other php code here */
 }
 else header("location:main.php"]
?>
<html>
<body>
</body>
......code html here
</html>

Open in new window

0
 
LVL 13

Author Closing Comment

by:duncanb7
ID: 39767161
Thanks for your reply and good articles, if you  have time, please give me some advise on my last post. Use session, session_start(); $_SEESION['ticker']="testing" instead of cookie ? if so, but
session expire time is hard to be controlled in php.ini file

Duncan
0
 
LVL 111

Expert Comment

by:Ray Paseur
ID: 39767850
Two HTTP requests will always be slower than one, but before you worry about that part, use a timer to determine how much slower.  It may not matter.

Here is the code snippet from the last post above, annotated with comments.  It does not really make sense as written.  If you want to post a question that describes what you're trying to do (in high-level, non-tehcnical terms) we can probably show you the best-of-breed design pattern.

<?php

// SET A COOKIE, ...
// BUT FOR WHAT SUBDOMAINS?
// AND WHAT PATH?
// HOW LONG SHOULD THE COOKIE LIVE?
// SHOULD IT BE VISIBLE TO JAVASCRIPT OR NOT?
setcookie("ticker",'testing');

// IF THIS COOKIE ALREADY EXISTED BEFORE THIS HTTP REQUEST
if (isset($_COOKIE['ticker'])) { 
/* ticker cookie is set  so do other php code here */
 }

// IF THIS COOKIE DID NOT ALREADY EXIST BEFORE THIS HTTP REQUEST
// MISSING STATEMENT TERMINATOR CAUSES A PARSE ERROR;
 else header("location:main.php"]
 
// THE SCRIPT WILL NEVER GET TO THIS INSTRUCTION BECAUSE IF/ELSE WILL STOP IT
?>
<html>
<body>
</body>
......code html here
</html>

Open in new window

0
 
LVL 13

Author Comment

by:duncanb7
ID: 39768167
Thanks Ray's rely even the question is closed.

For my memo only:
Finally, I decided to separate the code into two  php pages or files.
One php page is resolved all cookie or seesion issue first , and  becoz it is
really small file size so  it won't create too long http request time.
The second one is main php page for larger file  html code and size that is redirected
in the first php page by header().  That I think it will help on double request loading time issue.

Have a nice day

Duncan

first.php (the first php file)
======================
<?php 
$path=str_ireplace($_SERVER['DOCUMENT_ROOT'], '', dirname($_SERVER['SCRIPT_FILENAME']));
setcookie("ticker","testing", time()+3600*8, $path."/", $_SERVER["HTTP_HOST"], 0,1);
if (isset($_COOKIE['ticker'])) { 
header("location:second.php"); 
} 
else {
header("location:first.php")
;}
?>

Open in new window

0

Featured Post

What is SQL Server and how does it work?

The purpose of this paper is to provide you background on SQL Server. It’s your self-study guide for learning fundamentals. It includes both the history of SQL and its technical basics. Concepts and definitions will form the solid foundation of your future DBA expertise.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Build an array called $myWeek which will hold the array elements Today, Yesterday and then builds up the rest of the week by the name of the day going back 1 week.   (CODE) (CODE) Then you just need to pass your date to the function. If i…
3 proven steps to speed up Magento powered sites. The article focus is on optimizing time to first byte (TTFB), full page caching and configuring server for optimal performance.
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.
Suggested Courses

656 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question