A URL that ends in &action=login on a graph gallery is not an invitation to sign in. The historical query string meant the gallery’s PHP treated “login” as a mode: show a gate, check a session, or refuse the image directory to anonymous clients. This page keeps that address as an explanation of why graph galleries were gated—hotlinking and scrape load on image directories—not as a working account system.
There is no form here. There is no restored password file. There is no claim that member access has returned. The observation-chart articles at /graphs and /graphs2 (historical time-series galleries) are a different cluster and are not this essay. The first collection’s access-control problem is this URL. The second collection’s versioning-and-auth split is /graphs2&action=login.
Historical context
Cumulus sites published temperature, pressure, rain, and wind as PNG files. Community packs used JpGraph on the public host: a PHP script read a homemade log, drew a figure, and streamed image/png (last checked 13 August 2026). Templates then used <img src="graphTemp.php">. That architecture is scientifically discussed on plotting Cumulus observations with JPGraph. This page is not that figure contract. It is the traffic and abuse problem that made operators put the scripts behind a login.
PHP content managers of the era often used a single front controller: graphs.php?action=login, graphs&action=login in rewritten URLs, or a sister login.php that set a cookie and bounced back. Search engines and other sites copied the gate URL because it was what they received when they were not logged in. After the interactive system died, that string still needed a 200 document. The honest document is about access control, not a replica of the gate.
Hotlinking is a theft of the renderer, not only of bandwidth
Hotlinking is embedding another site’s URL as your image source: <img src="https://someone.example/graphs/temp.png">. For a static JPEG, the cost is bandwidth. For a Cumulus graph script, the cost is CPU on every view.
Each anonymous hit can:
- start PHP;
- include JpGraph and fonts;
- read the realtime log;
- allocate a GD image;
- emit a PNG.
A popular forum thread that inlined “nice 24-hour temp graph” could schedule that work for every reader, on the station owner’s shared host, without visiting the station page, without seeing units in HTML, and without the operator’s chrome. The figure still claimed to be a scientific plot. The host paid as if it were a public API with no rate limit.
Login-gating the gallery was a crude answer: browsers without a session cookie received HTML (or a 403) instead of image/png. Hotlink <img> tags then broke. That was the point. It also broke legitimate aggregators and mesomaps that expected a public PNG. Operators who wanted public figures used a static export (a PNG written on a timer) and gated only the renderer. Mixing those two objects in one directory is how gates became blunt.
This restoration does not re-enable a gate. It records why a gate existed: to stop other sites from driving the renderer.
Scrape load is the same renderer without a <img> tag
Bots and impatient humans scrape graph URLs with query strings: period, width, sensor, cache-busters. A script that accepts graphTemp.php?hours=24&w=800 and rebuilds on each unique query is a remote drawing service. Crawlers that ignore robots.txt, or that follow every date in a calendar UI, can fill a shared-host process table.
Login reduces scrape load only if the scraper does not have credentials. It does nothing against a leaked password, a session cookie copied from a phone, or an open directory listing of already-rendered files. Effective controls that do not require a public login theatre:
- Render offline. Cron (or the logger PC) writes dated PNGs. The web server serves files, not PHP.
- Cache with a clock. If you must render on request, cache by log mtime so identical requests reuse the PNG. JpGraph documented internal caching for this class of load (JpGraph usage notes).
- Deny directory indexes on the image folder so a scraper cannot enumerate every PNG.
- Rate-limit the renderer by IP or by a token you issue to your templates, not to the public internet.
- Do not put credentials in the graph URL.
?action=login&user=in a query string lands in logs, referrers, and Wayback snapshots.
A login wall in front of a directory that still lists temp_24h.png as world-readable is theatre. Access control is for the bytes, not for the HTML wrapper.
What a gallery login was not
It was not a scientific quality flag. A gated PNG is not more calibrated than a public PNG. The figure’s units, missing samples, and time base do not improve because a cookie was set.
It was not an official data embargo. Hobby stations are not NCEI. Gating does not make the series confidential climate. It only changes who can fetch the drawing.
It was not a restored membership program. TNET does not issue accounts for historical Cumulus galleries. Modern dashboard access, if a reader has it, is a different product on a different path.
It was not the observation article. How to read a temperature trace is a graphs/observations problem. This URL is why the directory was locked.
Practical guidance for operators
If you still publish PHP graphs:
- Prefer static, timestamped PNGs for anything you are willing to show the public.
- Keep the renderer off the public tree, or behind authentication that is not a query-string action.
- Set cache headers from the log’s modification time so intermediaries are not the enemy.
- Caption figures in HTML so a hotlink that steals the PNG at least does not steal the only copy of the unit string—though you should still expect theft.
- Never reuse this historical
&action=loginpattern as a live form on a restored host.
If you cite an old TNET graph URL, cite the figure article or the pack name, not a login mode. The gate is not the observation.
TNET research bridge
Access control on a graph directory is a publishing choice. The figure itself is still an observation series with units and gaps. TNET’s public account of source identity and quality is data sources, quality controls, and methodology. Observed versus derived labeling is how the service works.
The Cumulus hub lists related software pages. A second, versioned gallery’s own gate is explained at /graphs2&action=login. Mobile session cookies are /m&action=login. None of those URLs is a sign-in form.
Sources
- JpGraph (last checked 13 August 2026)
- JpGraph: purpose and usage
- PHP: GD (last checked 13 August 2026)
- Cumulus Wiki: Toolbox (last checked 13 August 2026)
- RFC 9110: HTTP Semantics
- TNET: data sources and methodology
- TNET: how the service works
- TNET Cumulus hub